home *** CD-ROM | disk | FTP | other *** search
/ Microsoft Programmer's Library / Microsoft Programmer's Library (CD-ROM Database)(125-099-008)(Version 1.1a)(CDRM 162100)(1989).iso / BOOKS / MASMREF.DB < prev    next >
Text File  |  1989-06-30  |  466KB  |  7,255 lines

  1. %@1@%%@AB@%Microsoft Macro Assembler 5.1 Reference%@AE@%%@EH@%%@NL@%
  2. %@CR:1a        @%%@NL@%
  3. %@NL@%
  4. %@NL@%
  5. ───────────────────────────────────────────────────────────────────────────%@NL@%
  6. %@NL@%
  7. %@NL@%
  8. %@AB@%Microsoft(R) Macro Assembler 5.1%@AE@%%@NL@%
  9. %@NL@%
  10. %@AB@%Reference %@AE@%%@NL@%
  11. %@NL@%
  12. %@NL@%
  13. %@NL@%
  14. ───────────────────────────────────────────────────────────────────────────%@NL@%
  15. %@NL@%
  16. %@NL@%
  17. %@NL@%
  18. %@4@%Information in this document is subject to change without notice and%@EH@%
  19. does not represent a commitment on the part of Microsoft Corporation.
  20. The software described in this document is furnished under a license
  21. agreement or nondisclosure agreement. The software may be used or copied
  22. only in accordance with the terms of the agreement. The purchaser may make
  23. one copy for backup purposes. No part of this manual may be reproduced
  24. or transmitted in any form or by any means, electronic or mechanical,
  25. including photocopying and recording, for any purpose other than the
  26. purchaser's personal use without the written permission of Microsoft
  27. Corporation.%@NL@%
  28. %@NL@%
  29. %@NL@%
  30. %@NL@%
  31. (c)Copyright Microsoft Corporation, 1987. All rights reserved.%@NL@%
  32. Simultaneously published in the U.S. and Canada.%@NL@%
  33. %@NL@%
  34. %@NL@%
  35. %@NL@%
  36. %@4@%Timings and encodings in this manual are used with permission of Intel and%@EH@%
  37. come from the following publications:%@NL@%
  38. %@NL@%
  39. %@4@%Intel Corporation. %@AI@%iAPX%@AE@% %@AI@%86,%@AE@% %@AI@%88,%@AE@% %@AI@%186,%@AE@% %@AI@%and%@AE@% %@AI@%188%@AE@% %@AI@%User's%@AE@% %@AI@%Manual%@AE@%, %@AI@%Programmer's%@AE@%%@EH@%
  40. %@AI@%Reference%@AE@%, Santa Clara, Calif. 1986.%@NL@%
  41. %@NL@%
  42. %@4@%Intel Corporation. %@AI@%iAPX%@AE@% %@AI@%286%@AE@% %@AI@%Programmer's%@AE@% %@AI@%Reference%@AE@% %@AI@%Manual%@AE@% %@AI@%including%@AE@% %@AI@%the%@AE@%%@EH@%
  43. %@AI@%iAPX%@AE@% %@AI@%286%@AE@% %@AI@%Numeric%@AE@% %@AI@%Supplement%@AE@%, Santa Clara, Calif. 1985.%@NL@%
  44. %@NL@%
  45. %@4@%Intel Corporation. %@AI@%80386%@AE@% %@AI@%Programmer's%@AE@% %@AI@%Reference%@AE@% %@AI@%Manual%@AE@%, Santa Clara,%@EH@%
  46. Calif. 1986.%@NL@%
  47. %@NL@%
  48. %@4@%Intel Corporation. %@AI@%80387%@AE@% %@AI@%80-bit%@AE@% %@AI@%CHMOS%@AE@% %@AI@%III%@AE@% %@AI@%Numeric%@AE@% %@AI@%Processor%@AE@% %@AI@%Extension%@AE@%,%@EH@%
  49. Santa Clara, Calif. 1987.%@NL@%
  50. %@NL@%
  51. %@NL@%
  52. %@NL@%
  53. %@4@%Microsoft(R), MS-DOS(R), and CodeView(R) are registered trademarks of%@EH@%
  54. Microsoft Corporation.%@NL@%
  55. %@NL@%
  56. Intel(R) is a registered trademark of Intel Corporation.%@NL@%
  57. %@NL@%
  58. %@NL@%
  59. %@NL@%
  60. %@NL@%
  61. %@NL@%
  62. %@NL@%
  63. %@1@%%@AB@%%@CR:Contents  @%TABLE OF CONTENTS%@AE@%%@EH@%%@NL@%
  64. %@NL@%
  65. ───────────────────────────────────────────────────────────────────────────%@NL@%
  66. %@NL@%
  67. %@AB@%Notational Conventions%@BO:      1052@%%@AE@%%@NL@%
  68. %@NL@%
  69. %@AB@%Programs%@BO:      16ec@%%@AE@%%@NL@%
  70.    MASM%@BO:      1e29@%%@NL@%
  71.    LINK%@BO:      2a6f@%%@NL@%
  72.    Microsoft(R) CodeView(R) Debugger%@BO:      3843@%%@NL@%
  73.    MAKE%@BO:      6f5f@%%@NL@%
  74.    LIB%@BO:      7cae@%%@NL@%
  75.    CREF%@BO:      80ed@%%@NL@%
  76.    SETENV%@BO:      8227@%%@NL@%
  77.    EXEPACK%@BO:      8357@%%@NL@%
  78.    EXEMOD%@BO:      8483@%%@NL@%
  79.    ERROUT%@BO:      8839@%%@NL@%
  80. %@NL@%
  81. %@AB@%Directives%@BO:      89ac@%%@AE@%%@NL@%
  82.    Directives%@BO:      a2c0@%%@NL@%
  83.    Operators%@BO:      f5e7@%%@NL@%
  84. %@NL@%
  85. %@AB@%Processor%@BO:     11539@%%@AE@%%@NL@%
  86.    Interpreting Processor Instructions%@BO:     13c39@%%@NL@%
  87.    Instructions%@BO:     1ca88@%%@NL@%
  88. %@NL@%
  89. %@AB@%Coprocessor%@BO:     57649@%%@AE@%%@NL@%
  90.    Interpreting Coprocessor Instructions%@BO:     587d9@%%@NL@%
  91.    Architecture%@BO:     5946d@%%@NL@%
  92.    Instructions%@BO:     5b04f@%%@NL@%
  93. %@NL@%
  94. %@AB@%Tables%@BO:     6a309@%%@AE@%%@NL@%
  95.    DOS Program Segment Prefix (PSP)%@BO:     6a4c9@%%@NL@%
  96.    ASCII Codes%@BO:     6bcac@%%@NL@%
  97.    Key Codes%@BO:     6e205@%%@NL@%
  98.    Color Display Attributes%@BO:     7101a@%%@NL@%
  99.    Hexadecimal-Binary-Decimal Conversion%@BO:     717aa@%%@NL@%
  100. %@NL@%
  101. %@NL@%
  102. %@AB@%FIGURES%@AE@%%@NL@%
  103. %@NL@%
  104. Figure 1%@BO:     14b94@%   Instruction Key%@NL@%
  105. Figure 2%@BO:     5a11c@%   Coprocessor Registers%@NL@%
  106. Figure 3%@BO:     5acff@%   Control Word and Status Word%@NL@%
  107. %@NL@%
  108. %@NL@%
  109. %@CR:1b        @%%@NL@%
  110. %@1@%%@AB@%Notational Conventions%@CR:Convention@%%@AE@%%@EH@%%@NL@%
  111. %@NL@%
  112. ───────────────────────────────────────────────────────────────────────────%@NL@%
  113. %@NL@%
  114. %@4@%%@AB@%KEY TERMS%@AE@%            Bold type indicates text that must be typed exactly%@EH@%
  115.                      as shown. This includes instructions, directives, 
  116.                      registers, commands, and program names. %@NL@%
  117. %@NL@%
  118. %@4@%%@AI@%placeholders%@AE@%         Italics indicate variable information supplied by%@EH@%
  119.                      the user.%@NL@%
  120. %@NL@%
  121. %@4@%Examples             Example source code lines are shown in regular%@EH@%
  122.                      typeface. When source code is discussed within a
  123.                      regular text paragraph, it is shown in %@AS@%this %@AE@%typeface. %@NL@%
  124. %@NL@%
  125. %@4@%«%@AI@%optional%@AE@% %@AI@%items%@AE@%»     Chevrons indicate that the enclosed item is %@EH@%
  126.                      optional. %@NL@%
  127. %@NL@%
  128. %@4@%{%@AI@%choice1%@AE@% | %@AI@%choice2%@AE@%}  Braces indicate a choice between two or more items.%@EH@%
  129.                      A vertical bar separates the choices. At least one 
  130.                      of the items must be chosen unless all the items are
  131.                      enclosed in double brackets. %@NL@%
  132. %@NL@%
  133. %@4@%Repeating            Ellipsis dots following an item indicate that more %@EH@%
  134. elements...          items having the same form may be typed. %@NL@%
  135. %@NL@%
  136. %@4@%%@AB@%START%@AE@%                Vertical ellipsis dots indicate that additional lines %@EH@%
  137. %@AB@%.%@AE@%                    may be added between the starting and ending elements.
  138. %@AB@%.%@AE@%
  139. %@AB@%.%@AE@%
  140. %@AB@%END%@AE@%
  141. %@NL@%
  142. %@NL@%
  143. %@CR:2         @%%@NL@%
  144. %@1@%%@AB@%Programs%@CR:Programs  @%%@AE@%%@EH@%%@NL@%
  145. %@NL@%
  146. ───────────────────────────────────────────────────────────────────────────%@NL@%
  147. %@NL@%
  148. MASM%@BO:      1e29@%%@NL@%
  149.    Command-Line Syntax%@BO:      1f16@%%@NL@%
  150.    Options%@BO:      2058@%%@NL@%
  151.    Environment Variables%@BO:      2872@%%@NL@%
  152. %@NL@%
  153. LINK%@BO:      2a6f@%%@NL@%
  154.    Command-Line Syntax%@BO:      2af4@%%@NL@%
  155.    Options%@BO:      2cbf@%%@NL@%
  156.    Environment Variables%@BO:      3658@%%@NL@%
  157. %@NL@%
  158. Microsoft(R) CodeView(R) Debugger%@BO:      3843@%%@NL@%
  159.    Command-Line Syntax%@BO:      390c@%%@NL@%
  160.    Options%@BO:      39c1@%%@NL@%
  161.    Window Commands%@BO:      402c@%%@NL@%
  162.    Format Specifiers%@BO:      48d6@%%@NL@%
  163.    Size Specifiers%@BO:      51e4@%%@NL@%
  164.    Dialog Commands%@BO:      5642@%%@NL@%
  165. %@NL@%
  166. MAKE%@BO:      6f5f@%%@NL@%
  167.    Command-Line Syntax%@BO:      7042@%%@NL@%
  168.    Options%@BO:      70fa@%%@NL@%
  169.    Syntax for MAKE Files%@BO:      7464@%%@NL@%
  170.    Syntax for Macro Definitions%@BO:      7527@%%@NL@%
  171.    Syntax for Inference Rules%@BO:      75d3@%%@NL@%
  172.    Syntax for Dependency Rules%@BO:      773a@%%@NL@%
  173.    Syntax for Using Macros%@BO:      791a@%%@NL@%
  174.    Special Macro Names%@BO:      799b@%%@NL@%
  175.    Environment Variable%@BO:      7b3c@%%@NL@%
  176. %@NL@%
  177. LIB%@BO:      7cae@%%@NL@%
  178.    Command-Line Syntax%@BO:      7d4a@%%@NL@%
  179.    Commands%@BO:      7e82@%%@NL@%
  180. %@NL@%
  181. CREF%@BO:      80ed@%%@NL@%
  182.    Command-Line Syntax%@BO:      817d@%%@NL@%
  183. %@NL@%
  184. SETENV%@BO:      8227@%%@NL@%
  185.    Command-Line Syntax%@BO:      82bb@%%@NL@%
  186. %@NL@%
  187. EXEPACK%@BO:      8357@%%@NL@%
  188.    Command-Line Syntax%@BO:      83ed@%%@NL@%
  189. %@NL@%
  190. EXEMOD%@BO:      8483@%%@NL@%
  191.    Command-Line Syntax%@BO:      8517@%%@NL@%
  192.    Options%@BO:      85ab@%%@NL@%
  193. %@NL@%
  194. ERROUT%@BO:      8839@%%@NL@%
  195.    Command-Line Syntax%@BO:      88cd@%%@NL@%
  196. %@NL@%
  197. %@NL@%
  198. %@CR:3         @%%@NL@%
  199. %@2@%%@AB@%MASM%@CR:MASM      @%%@AE@%%@EH@%%@QR:syntax@%%@QR:command line syntax@%%@QR:command syntax@%%@QR:masm command syntax@%%@QR:masm syntax@%%@NL@%
  200. ───────────────────────────────────────────────────────────────────────────%@NL@%
  201. %@3@%%@AB@%Command-Line Syntax%@AE@%%@CR:MASM-1    @%%@EH@%%@NL@%
  202. %@NL@%
  203. %@4@%%@AB@%MASM%@AE@% «%@AI@%options%@AE@%» %@AI@%sourcefile%@AE@% «%@AB@%,%@AE@%«%@AI@%objectfile%@AE@%» «%@AB@%,%@AE@%«%@AI@%listingfile%@AE@%»%@QR:masm@%%@EH@%
  204. «%@AB@%,%@AE@%«%@AI@%crossreferencefile%@AE@%»»»» «%@AB@%;%@AE@%»%@NL@%
  205. %@NL@%
  206. %@NL@%
  207. %@3@%%@AB@%Options%@AE@%%@CR:MASM-2    @%%@EH@%%@NL@%
  208. %@NL@%
  209. %@TH: 025  1978 01 19 57 @%%@AB@%Option             Action%@AE@%───────────────────────────────────────────────────────────────────────────%@AB@%/A%@AE@%                 Writes segments in alphabetical order%@QR:masm /a@%%@AB@%/B%@AI@%number%@AE@%           Sets buffer size%@QR:masm /b@%%@AB@%/C%@AE@%                 Specifies a cross-reference file%@QR:masm /c@%%@AB@%/D%@AE@%                 Creates a Pass 1 listing%@QR:masm /d@%%@AB@%/D%@AI@%symbol%@AE@%«=%@AI@%value%@AE@%»   Defines assembler symbol%@QR:masm /d@%%@AB@%/E%@AE@%                 Emulates floating-point instructions%@QR:masm /e@%%@AB@%/H%@AE@%                 Lists options and command-line syntax%@QR:masm /h@%%@AB@%/I%@AI@%path%@AE@%             Sets include-file search path%@QR:masm /i@%%@AB@%/L%@AE@%                 Specifies an assembly-listing file%@QR:masm /l@%%@AB@%/ML%@AE@%                Preserves case in names%@QR:masm /ml@%%@AB@%/MU%@AE@%                Converts names to uppercase (default)%@QR:masm /mu@%%@AB@%/MX%@AE@%                Preserves case in public and external names%@QR:masm /mx@%%@AB@%/N%@AE@%                 Suppresses tables in listing file%@QR:masm /n@%%@AB@%/P%@AE@%                 Checks for impure code%@QR:masm /p@%%@AB@%/S%@AE@%                 Writes segments in sequential order (default)%@QR:masm /s@%%@AB@%/T%@AE@%                 Suppresses messages for successful assembly%@QR:masm /t@%%@AB@%/V%@AE@%                 Displays extra statistics%@QR:masm /v@%%@AB@%/W{0|1|2}%@AE@%          Sets error display level%@QR:masm /w@%%@AB@%/X%@AE@%                 Shows false conditional blocks in listings%@QR:masm /x@%%@AB@%/Z%@AE@%                 Displays error lines on screen%@QR:masm /z@%%@AB@%/ZD%@AE@%                Puts line number information in the object file%@QR:masm /zd@%%@AB@%/ZI%@AE@%                Puts symbolic and line number information in%@QR:masm /zi@%                   the object file (for CodeView(R) debugger)%@TE: 025  1978 01 19 57 @%
  210. %@NL@%
  211. %@3@%%@AB@%Environment Variables%@AE@%%@CR:MASM-3    @%%@EH@%%@QR:environment variables@%%@QR:environment@%%@QR:variables@%%@QR:variable@%%@NL@%
  212. %@NL@%
  213. %@TH: 004   305 01 19 57 @%%@AB@%Variable           Description%@AE@%───────────────────────────────────────────────────────────────────────────%@AB@%INCLUDE%@AE@%            Sets search path for include files%@QR:include@%%@AB@%MASM%@AE@%               Specifies default assembler options%@QR:masm@%%@TE: 004   305 01 19 57 @%
  214. %@CR:4         @%%@NL@%
  215. %@2@%%@AB@%LINK%@CR:LINK      @%%@AE@%%@EH@%%@NL@%
  216. ───────────────────────────────────────────────────────────────────────────%@NL@%
  217. %@3@%%@AB@%Command-Line Syntax%@AE@%%@CR:LINK-1    @%%@EH@%%@QR:command-line syntax@%%@QR:command line syntax@%%@QR:link command syntax@%%@QR:link syntax@%%@QR:link@%%@CMTlink syntax@%%@CMTlink command syntax@%%@QR:syntax@%%@NL@%
  218. %@NL@%
  219. %@AB@%LINK%@AE@% «%@AI@%options%@AE@%» %@AI@%objectfiles%@AE@% «%@AB@%,%@AE@%«%@AI@%executablefile%@AE@%» «%@AB@%,%@AE@%«%@AI@%mapfile%@AE@%»
  220. «%@AB@%,%@AE@%«%@AI@%libraryfiles%@AE@%»»»» «%@AB@%;%@AE@%»%@NL@%
  221. %@NL@%
  222. %@NL@%
  223. %@3@%%@AB@%Options%@AE@%%@CR:LINK-2    @%%@EH@%%@NL@%
  224. %@NL@%
  225. %@TH: 046  2225 01 19 57 @%%@AB@%Option             Action%@AE@%───────────────────────────────────────────────────────────────────────────%@AB@%/B%@AE@%                 Prevents prompting when errors are encountered (for%@QR:link /b@%                   make and batch files)%@AB@%/CO%@AE@%                Creates a special-format executable file containing%@QR:link /co@%                   symbolic information needed by the CodeView debugger%@AB@%/CP:%@AI@%number%@AE@%         Sets the program's maximum allocation to %@AI@%number%@AE@% of%@QR:link /cp@%                   paragraphs%@AB@%/DO%@AE@%                Orders segments in the default order used by Microsoft%@QR:link /do@%                   high-level languages%@AB@%/E%@AE@%                 Packs the executable file%@QR:link /e@%%@AB@%/F%@AE@%                 Optimizes far calls%@QR:link /f@%%@AB@%/HE%@AE@%                Displays %@AB@%LINK%@AE@% options%@QR:link /he@%%@AB@%/I%@AE@%                 Displays linking information, including the name of each%@QR:link /i@%                   input module as it is linked%@AB@%/L%@AE@%                 Lists line numbers and addresses of source statements in%@QR:link /l@%                   the map file%@AB@%/M%@AE@%«%@AB@%:%@AI@%number%@AE@%»        Lists all public symbols in the map file (%@AI@%number%@AE@% is the%@QR:link /m@%                   maximum number of symbols)%@AB@%/NOD%@AE@%               Ignores default libraries%@QR:link /nod@%%@AB@%/NOF%@AE@%               Disables far call optimization%@QR:link /nof@%%@AB@%/NOI%@AE@%               Distinguishes between uppercase and lowercase letters%@QR:link /noi@%%@AB@%/NOP%@AE@%               Disables code segment packing%@QR:link /nop@%%@AB@%/PAC%@AE@%               Packs contiguous code segments%@QR:link /pac@%%@AB@%/PAU%@AE@%               Pauses during the link session for disk changes%@QR:link /pau@%%@AB@%/Q%@AE@%                 Creates an in-memory (load-time) library for a Quick%@QR:link /q@%                   language (such as QuickBASIC)%@AB@%/ST:%@AI@%number%@AE@%         Sets the stack size to %@AI@%number%@AE@%, which may be up to%@QR:link /st@%                   65,536 bytes%@TE: 046  2225 01 19 57 @%
  226. Note: Several rarely used options not listed above are described in the
  227. CodeView(R) and Utilities manual.%@NL@%
  228. %@NL@%
  229. %@CR:5         @%%@NL@%
  230. %@3@%%@AB@%Environment Variables%@AE@%%@CR:LINK-3    @%%@EH@%%@NL@%
  231. %@NL@%
  232. %@TH: 005   381 01 19 57 @%%@AB@%Variable           Description%@AE@%───────────────────────────────────────────────────────────────────────────%@AB@%LIB%@AE@%                Sets search path for library files%@QR:lib@%%@AB@%LINK%@AE@%               Specifies default linker options%@QR:link@%%@AB@%TMP%@AE@%                Sets path for the %@AB@%VM.TMP%@AE@% file%@QR:tmp@%%@TE: 005   381 01 19 57 @%
  233. %@NL@%
  234. %@2@%%@AB@%Microsoft(R) CodeView(R) Debugger%@AE@%%@CR:Debugger  @%%@EH@%%@QR:cv@%%@QR:debugger@%%@QR:codeview@%%@NL@%
  235. ───────────────────────────────────────────────────────────────────────────%@NL@%
  236. %@3@%%@AB@%Command-Line Syntax%@AE@%%@CR:DEBUG-1   @%%@EH@%%@NL@%
  237. %@NL@%
  238. %@AB@%CV%@AE@% «%@AI@%options%@AE@%» %@AI@%executablefile%@AE@% «%@AI@%arguments%@AE@%»%@NL@%
  239. %@NL@%
  240. %@NL@%
  241. %@3@%%@AB@%Options%@AE@%%@CR:DEBUG-2   @%%@EH@%%@NL@%
  242. %@NL@%
  243. %@TH: 032  1530 01 19 57 @%%@AB@%Option             Action%@AE@%───────────────────────────────────────────────────────────────────────────%@AB@%/2%@AE@%                 Enables use with two monitors and two graphics adapters%@QR:cv /2@%%@AB@%/43%@AE@%                Starts in 43-line mode on EGA%@QR:cv /43@%%@AB@%/B%@AE@%                 Starts in black-and-white mode%@QR:cv /b@%%@AB@%/C%@AI@%commands%@AE@%         Executes %@AI@%commands%@AE@% on start-up%@QR:cv /c@%%@AB@%/D%@AE@%                 Turns off nonmaskable interrupt and 8259 interrupt%@QR:cv /d@%                   trapping (necessary for some compatibles)%@AB@%/E%@AE@%                 Enables expanded memory support%@QR:cv /e@%%@AB@%/F%@AE@%                 Starts with screen flipping (exchanges screens by%@QR:cv /f@%                   flipping video pages)%@AB@%/I%@AE@%                 Forces the debugger to handle nonmaskable interrupt and%@QR:cv /i@%                   8259 interrupt trapping (necessary for some compatibles)%@AB@%/M%@AE@%                 Disables the mouse%@QR:cv /m@%%@AB@%/P%@AE@%                 Disables palette-register saving (necessary for some%@QR:cv /p@%                   EGA-compatible adapters)%@AB@%/S%@AE@%                 Starts with screen swapping (exchanges screens by%@QR:cv /s@%                   changing buffers)%@AB@%/T%@AE@%                 Starts in sequential mode%@QR:cv /t@%%@AB@%/W%@AE@%                 Starts in window mode (necessary for some compatibles)%@QR:cv /w@%%@TE: 032  1530 01 19 57 @%
  244. %@CR:6         @%%@NL@%
  245. %@3@%%@AB@%Window Commands%@AE@%%@CR:DEBUG-3   @%%@EH@%%@QR:window@%%@QR:codeview window commands@%%@QR:cv window@%%@QR:window commands@%%@NL@%
  246. %@NL@%
  247. %@TH: 028 02012 01 25 16 35 @%%@AB@%Action                   Keyboard        Mouse%@AE@%───────────────────────────────────────────────────────────────────────────Open help screen         %@AB@%F1%@AE@%              Help menuToggle register window   %@AB@%F2%@AE@%              Registers from View menuToggle display mode      %@AB@%F3%@AE@%              Source, Mixed, or Assembly from                                         View menuSwitch to output screen  %@AB@%F4%@AE@%              Output from View menuGo                       %@AB@%F5%@AE@%              Click left on GoSwitch display/dialog    %@AB@%F6%@AE@%              NoneExecute to here          %@AB@%F7%@AE@% at cursor    Click right at locationTrace through            %@AB@%F8%@AE@%              Click left on TraceSet breakpoint here      %@AB@%F9%@AE@% at cursor    Click left at locationStep over                %@AB@%F10%@AE@%             Click right on TraceChange flag              None            Click left on flagScroll up line           None            Click left on up arrowScroll up page           %@AB@%PGUP%@AE@%            Click left above elevatorScroll to top            %@AB@%HOME%@AE@%            Drag elevator to topScroll down line         None            Click left on down arrowScroll down page         %@AB@%PGDN%@AE@%            Click left below elevatorScroll to bottom         %@AB@%END%@AE@%             Drag elevator to bottomScroll to location       None            Drag elevator to locationMove cursor up           %@AB@%UP%@AE@% arrow        NoneMove cursor down         %@AB@%DOWN%@AE@% arrow      NoneMake window grow         %@AB@%CTRL+G%@AE@%          Drag line up or downMake window tiny         %@AB@%CTRL+T%@AE@%          Drag line up or downFind text                %@AB@%CTRL+F%@AE@%          Find from Search menuAdd watch expression     %@AB@%CTRL+W%@AE@%          Add Watch from Watch menuDelete watch statement   %@AB@%CTRL+U%@AE@%          Delete Watch from Watch menu%@TE: 028 02012 01 25 16 35 @%
  248. %@CR:7         @%%@NL@%
  249. %@3@%%@AB@%Format Specifiers%@AE@%%@CR:DEBUG-4   @%%@EH@%%@QR:cv format specifiers@%%@QR:codeview format@%%@QR:format@%%@QR:cv format@%%@QR:display format@%%@QR:watch format@%%@QR:watch expression@%%@QR:tracepoint expression@%%@QR:watchpoint@%%@QR:tracepoint@%%@NL@%
  250. %@NL@%
  251. %@4@%Use with Display Expression, Watch Expression, and Tracepoint Expression%@EH@%
  252. dialog commands.%@NL@%
  253. %@NL@%
  254. %@TH: 030 01556 01 12 26 38 @%%@AB@%Character   Argument Type             Output Format%@AE@%───────────────────────────────────────────────────────────────────────────%@AB@%d%@AE@% or %@AB@%i%@AE@%      Integer                   Signed decimal integer%@AB@%u%@AE@%           Integer                   Unsigned decimal integer%@AB@%o%@AE@%           Integer                   Unsigned octal integer%@AB@%x%@AE@% or %@AB@%X%@AE@%      Integer                   Hexadecimal integer%@AB@%f%@AE@%           Floating point            Signed value in floating-point                                      decimal format with                                      six decimal places%@AB@%e%@AE@% or %@AB@%E%@AE@%      Floating point            Signed value in scientific-                                      notation format with up                                      to six decimal places (trailing                                      zeros or decimal point                                      truncated)%@AB@%g%@AE@% or %@AB@%G%@AE@%      Floating point            Signed value with floating-                                      point decimal or scientific                                      notation, whichever is more                                      compact%@AB@%c%@AE@%           Character                 Single character%@AB@%s%@AE@%           String                    Characters printed up to the                                      first null (C null-terminated                                      strings only)%@TE: 030 01556 01 12 26 38 @%
  255. %@4@%Note: If appropriate for the language, the prefix %@AB@%l%@AE@% can be used with%@EH@%
  256. the integer format specifiers (%@AB@%d%@AE@%, %@AB@%o%@AE@%, %@AB@%u%@AE@%, %@AB@%x%@AE@%, and %@AB@%X%@AE@%) to specify a four-byte
  257. integer. The prefix %@AB@%h%@AE@% can be used with the same types to specify a two-
  258. byte integer.%@NL@%
  259. %@NL@%
  260. %@NL@%
  261. %@3@%%@AB@%Size Specifiers%@AE@%%@CR:DEBUG-5   @%%@EH@%%@QR:cv size specifiers@%%@QR:cv size specifier@%%@QR:size dump@%%@QR:enter size@%%@QR:watch size@%%@QR:tracepoint size@%%@QR:codeview size@%%@NL@%
  262. %@NL@%
  263. %@4@%Use with Dump, Enter, Watch Memory, and Tracepoint Memory dialog commands.%@EH@%%@NL@%
  264. %@NL@%
  265. %@TH: 012 00757 01 20 56 @%%@AB@%Type                Description%@AE@%───────────────────────────────────────────────────────────────────────────No type             The current type (default is byte)%@AB@%A%@AE@% (ASCII)           ASCII (8-bit) characters%@AB@%B%@AE@% (Byte)            Byte (8-bit) hexadecimal values%@AB@%I%@AE@% (Integer)         Integer (16-bit) decimal values%@AB@%U%@AE@% (Unsigned)        Unsigned (8-bit) decimal values%@AB@%W%@AE@% (Word)            Word (16-bit) hexadecimal values%@AB@%D%@AE@% (Doubleword)      Doubleword (32-bit) hexadecimal values%@AB@%S%@AE@% (Short Real)      Short-real (32-bit) values%@AB@%L%@AE@% (Long Real)       Long-real (64-bit) values%@AB@%T%@AE@% (10-Byte Real)    10-byte-real values%@TE: 012 00757 01 20 56 @%
  266. %@CR:8         @%%@NL@%
  267. %@3@%%@AB@%Dialog Commands%@AE@%%@CR:DEBUG-6   @%%@EH@%%@QR:codeview dialog@%%@QR:cv dialog@%%@QR:dialog commands@%%@QR:dialog command@%%@NL@%
  268. %@NL@%
  269. %@TH: 122  6248 01 14 24 38 @%%@AB@%Name          Syntax                  Description%@AE@%───────────────────────────────────────────────────────────────────────────8087          %@AB@%7%@AE@%                       Displays coprocessor or emulator                                      statusAssemble      %@AB@%A%@AE@% «%@AI@%addr%@AE@%»                Assembles mnemonics starting at                                      given addressBreak Clear   %@AB@%BC%@AE@% {%@AI@%list%@AE@%|*}             Clears listed breakpointsBreak Disable %@AB@%BD%@AE@% {%@AI@%list%@AE@%|*}             Disables listed breakpointsBreak Enable  %@AB@%BE%@AE@% {%@AI@%list%@AE@%|*}             Enables listed breakpointsBreak List    %@AB@%BL%@AE@%                      Lists current breakpointsBreak Set     %@AB@%BP%@AE@% «%@AI@%addr%@AE@%«%@AI@%pc%@AE@%»«%@AB@%"%@AI@%cmds%@AB@%"%@AE@%»»   Sets breakpoint at given address with                                       the specified pass count (%@AI@%pc%@AE@%); given                                      commands are executed at each breakComment       * comment               Displays explanatory textCompare       %@AB@%C %@AI@%range%@AE@% %@AI@%addr%@AE@%            Compares bytes in %@AI@%range%@AE@% with bytes  Memory                                beginning at given address; displays                                       mismatchesCurrent       %@AB@%.%@AE@%                       Displays the current source lineLocationDelay         %@AB@%:%@AE@%                       Delays redirected commandsDisplay       %@AB@%?%@AI@%expr%@AE@%«%@AB@%,%@AI@%fmt%@AE@%»             Displays expression in formatDump          %@AB@%D%@AE@%«%@AI@%type%@AE@%» «%@AI@%range%@AE@%»         Dumps memory %@AI@%range%@AE@% in %@AI@%type%@AE@% formatEnter         %@AB@%E%@AE@%«%@AI@%type%@AE@%» %@AI@%addr%@AE@% «%@AI@%list%@AE@%»     Enters memory values in %@AI@%type%@AE@% formatExamine       %@AB@%X?%@AI@%mod%@AB@%!%@AI@%proc%@AB@%.%@AE@%{%@AI@%sym%@AE@%|*}      Displays symbols in given module andSymbols                               procedureExecute       %@AB@%E%@AE@%                       Executes in slow motionFill Memory   %@AB@%F %@AI@%range%@AE@% %@AI@%list%@AE@%            Fills %@AI@%range%@AE@% with the listed valuesGo            %@AB@%G%@AE@% «%@AI@%addr%@AE@%»                Executes to address or to endHelp          %@AB@%H%@AE@%                       Displays on-line helpLoad          %@AB@%L%@AE@% «%@AI@%args%@AE@%»                Restarts program with given arguments Move Memory   %@AB@%M %@AI@%range%@AE@% %@AI@%addr%@AE@%            Copies values in %@AI@%range%@AE@% to the given                                       addressOption        %@AB@%O%@AE@%«%@AB@%F|B|C|3%@AE@%«+|-»»         Toggles flip/swap, bytes coded, case                                      sense, or 386 optionPause         %@AB@%"%@AE@%                       Interrupts redirected commands and                                      waits for keystrokePort Input    %@AB@%I %@AI@%port%@AE@%                  Displays byte from %@AI@%port%@AE@%%@CR:9         @%Port Output   %@AB@%O %@AI@%port%@AE@% %@AI@%value%@AE@%            Sends byte value to %@AI@%port%@AE@%Program Step  %@AB@%P%@AE@% «%@AI@%count%@AE@%»               Executes, stepping over calls;                                      repeats %@AI@%count%@AE@% timesQuit          %@AB@%Q%@AE@%                       Exits to DOSRadix         %@AB@%N%@AE@%«%@AI@%radix%@AE@%»                Sets input radixRedirection   «%@AB@%T%@AE@%»>«>»%@AI@%device%@AE@%           Redirects input or output to or              <%@AI@%device%@AE@%                 from %@AI@%device%@AE@%              =%@AI@%device%@AE@%Redraw        %@AB@%@%@AE@%                       Redraws the screenRegister      %@AB@%R%@AE@%«%@AI@%register%@AE@%««=»%@AI@%expr%@AE@%»»    Displays registers and flags, or sets                                      new registers and flagsScreen        \                       Displays the output screenExchangeSearch Text   /«%@AI@%regexpr%@AE@%»              Searches for a regular expressionSearch        %@AB@%S %@AI@%range%@AE@% %@AI@%list%@AE@%            Searches %@AI@%range%@AE@% for listed values, and Memory                                displays where values are foundSet Mode      %@AB@%S%@AE@%«+ | - | %@AB@%&%@AE@%»            Toggles source, assembly, and                                      mixed modesShell Escape  %@AB@%!%@AE@%«%@AI@%command%@AE@%»              Escapes to a new DOS shellStack Trace   %@AB@%K%@AE@%                       Displays routines currently active on                                      the stackTab Set       %@AB@%#%@AI@%number%@AE@%                 Sets tab size to %@AI@%number%@AE@%Trace         %@AB@%T%@AE@% «%@AI@%count%@AE@%»               Executes, tracing into calls; repeats                                      %@AI@%count%@AE@% timesTracepoint    %@AB@%TP? %@AI@%expr%@AE@%«%@AB@%,%@AI@%fmt%@AE@%»          Breaks when given expression or               %@AB@%TP%@AE@%«%@AI@%type%@AE@%» %@AI@%range%@AE@%          memory value range changes; displays                                      in watch windowUnassemble    %@AB@%U%@AE@%«%@AI@%range%@AE@%»                Displays unassembled instructionsUse           %@AB@%USE%@AE@%«%@AI@%language%@AE@%»           Switches expression evaluatorsView          %@AB@%V%@AE@% «.«%@AI@%file%@AE@%:»%@AI@%line%@AE@%»        Displays specified source lines of                                      given fileWatch         %@AB@%W? %@AI@%expr%@AE@%«%@AB@%,%@AI@%fmt%@AE@%»           Displays given expression or memory              %@AB@%W%@AE@%«%@AI@%type%@AE@%» %@AI@%range%@AE@%           %@AI@%range%@AE@% in watch windowWatch Delete  %@AB@%Y%@AE@%{%@AI@%number%@AE@%|*}             Deletes (yanks) the given watch                                      statementsWatch List    %@AB@%W%@AE@%                       Lists watch statementsWatchpoint    %@AB@%WP? %@AI@%expr%@AE@%«%@AB@%,%@AI@%fmt%@AE@%»          Breaks when given expression is true;                                      displays in watch window%@CR:10        @%%@NL@%%@TE: 122  6248 01 14 24 38 @%
  270. %@2@%%@AB@%MAKE%@CR:MAKE      @%%@AE@%%@EH@%%@QR:make@%%@QR:make command@%%@QR:make commands@%%@QR:make syntax@%%@QR:make command syntax@%%@NL@%
  271. ───────────────────────────────────────────────────────────────────────────%@NL@%
  272. %@3@%%@AB@%Command-Line Syntax%@AE@%%@CR:MAKE-1    @%%@EH@%%@NL@%
  273. %@NL@%
  274. %@AB@%MAKE%@AE@% «%@AI@%options%@AE@%» «%@AI@%macrodefinitions%@AE@%» %@AI@%filename%@AE@%%@NL@%
  275. %@NL@%
  276. %@NL@%
  277. %@3@%%@AB@%Options%@AE@%%@CR:MAKE-2    @%%@EH@%%@NL@%
  278. %@NL@%
  279. %@TH: 014   778 01 11 65 @%%@AB@%Option     Action%@AE@%───────────────────────────────────────────────────────────────────────────%@AB@%/D%@AE@%         Displays the last modification date of each file as the%@QR:make /d@%           file is scanned%@AB@%/I%@AE@%         Ignores exit codes returned by programs called from the%@QR:make /i@%           %@AB@%MAKE%@AE@% description file; %@AB@%MAKE%@AE@% continues execution of the           next lines of the description file despite the errors%@AB@%/N%@AE@%         Displays commands that would be executed by a description%@QR:make /n@%           file, but does not actually execute the commands%@AB@%/S%@AE@%         Executes in silent mode; lines are not displayed as they%@QR:make /s@%           are executed%@TE: 014   778 01 11 65 @%
  280. %@NL@%
  281. %@3@%%@AB@%Syntax for MAKE Files%@AE@%%@CR:MAKE-3    @%%@EH@%%@NL@%
  282. %@NL@%
  283. «%@AI@%macrodefinitions%@AE@%»%@NL@%
  284. «%@AI@%inferencerules%@AE@%»%@NL@%
  285. %@AI@%dependencyrules%@AE@%%@NL@%
  286. %@NL@%
  287. %@NL@%
  288. %@3@%%@AB@%Syntax for Macro Definitions%@AE@%%@CR:MAKE-4    @%%@EH@%%@QR:make macro@%%@QR:make macros@%%@NL@%
  289. %@NL@%
  290. %@AI@%name%@AB@%=%@AI@%value%@AE@%%@NL@%
  291. %@NL@%
  292. %@NL@%
  293. %@3@%%@AB@%Syntax for Inference Rules%@AE@%%@CR:MAKE-5    @%%@EH@%%@QR:make inference rules@%%@QR:make inference@%%@NL@%
  294. %@NL@%
  295. %@AI@%.inextension.outextension%@AE@% %@AB@%:%@AE@%%@NL@%
  296.          %@AI@%command%@AE@%%@NL@%
  297.          «%@AI@%command%@AE@%»%@NL@%
  298.          %@AB@%.%@AE@%%@NL@%
  299.          %@AB@%.%@AE@%%@NL@%
  300.          %@AB@%.%@AE@%%@NL@%
  301. %@NL@%
  302. %@NL@%
  303. %@3@%%@AB@%Syntax for Dependency Rules%@AE@%%@CR:MAKE-6    @%%@EH@%%@QR:make dependency@%%@QR:make dependency rules@%%@NL@%
  304. %@NL@%
  305. %@AI@%targetfile%@AB@%:%@AI@%dependentfiles%@AE@%«%@AB@%#%@AE@%comment»%@NL@%
  306. «%@AB@%#%@AI@%comment%@AE@%»%@NL@%
  307.        %@AI@%command%@AE@%«%@AB@%#%@AI@%comment%@AE@%»%@NL@%
  308.        «%@AI@%command%@AE@%»«%@AB@%#%@AI@%comment%@AE@%»%@NL@%
  309.        %@AB@%.%@AE@%%@NL@%
  310.        %@AB@%.%@AE@%%@NL@%
  311.        %@AB@%.%@AE@%%@NL@%
  312. %@NL@%
  313. %@CR:11        @%%@NL@%
  314. %@3@%%@AB@%Syntax for Using Macros%@AE@%%@CR:MAKE-7    @%%@EH@%%@NL@%
  315. %@NL@%
  316. %@AB@%$(%@AI@%name%@AB@%)%@AE@%%@NL@%
  317. %@NL@%
  318. %@NL@%
  319. %@3@%%@AB@%Special Macro Names%@AE@%%@CR:MAKE-8    @%%@EH@%%@NL@%
  320. %@NL@%
  321. %@TH: 005 00309 01 11 65 @%%@AB@%Name       Value Substituted%@AE@%───────────────────────────────────────────────────────────────────────────%@AB@%$*%@AE@%         Base-name portion of the outfile (no extension)%@AB@%$@%@AE@%         Complete outfile name%@AB@%$**%@AE@%        Complete list of infiles%@TE: 005 00309 01 11 65 @%
  322. %@NL@%
  323. %@3@%%@AB@%Environment Variable%@AE@%%@CR:MAKE-9    @%%@EH@%%@NL@%
  324. %@NL@%
  325. %@TH: 004 00261 01 11 65 @%%@AB@%Variable   Description%@AE@%───────────────────────────────────────────────────────────────────────────%@AB@%INIT%@AE@%       Specifies location of the %@AB@%TOOLS.INI%@AE@% file, which may           contain inference rules%@TE: 004 00261 01 11 65 @%
  326. %@NL@%
  327. %@2@%%@AB@%LIB%@CR:LIB       @%%@AE@%%@EH@%%@QR:lib@%%@QR:library@%%@NL@%
  328. ───────────────────────────────────────────────────────────────────────────%@NL@%
  329. %@3@%%@AB@%Command-Line Syntax%@AE@%%@CR:LIB-1     @%%@EH@%%@NL@%
  330. %@NL@%
  331. %@AB@%LIB %@AI@%oldlibrary%@AE@% «%@AB@%/P%@AE@%«%@AB@%AGESIZE%@AE@%»%@AB@%:%@AI@%number%@AE@%» «%@AI@%commands%@AE@%»%@NL@%
  332. «%@AB@%,%@AE@%«%@AI@%listfile%@AE@%» «%@AB@%,%@AE@%«%@AI@%newlibrary%@AE@%»»» «%@AB@%;%@AE@%»%@NL@%
  333. %@NL@%
  334. %@NL@%
  335. %@3@%%@AB@%Commands%@AE@%%@CR:LIB-2     @%%@EH@%%@NL@%
  336. %@NL@%
  337. %@TH: 013 00505 01 11 65 @%%@AB@%Code       Task Description%@AE@%───────────────────────────────────────────────────────────────────────────+          Appends an object file or library file-          Deletes a module-+         Replaces a module by deleting it and appending an object           file with the same name*          Copies an object module onto an independant object file-*         Moves a module out of the library by copying it to an           object file and then deleting it%@TE: 013 00505 01 11 65 @%
  338. %@CR:12        @%%@NL@%
  339. %@2@%%@AB@%CREF%@CR:CREF      @%%@AE@%%@EH@%%@QR:cref@%%@NL@%
  340. ───────────────────────────────────────────────────────────────────────────%@NL@%
  341. %@3@%%@AB@%Command-Line Syntax%@AE@%%@CR:CREF-1    @%%@EH@%%@NL@%
  342. %@NL@%
  343. %@AB@%CREF %@AI@%crossreferencefile%@AE@%«%@AI@%crossreferencelisting%@AE@%»%@NL@%
  344. %@NL@%
  345. %@NL@%
  346. %@2@%%@AB@%SETENV%@CR:SETENV    @%%@AE@%%@EH@%%@QR:setenv@%%@NL@%
  347. ───────────────────────────────────────────────────────────────────────────%@NL@%
  348. %@3@%%@AB@%Command-Line Syntax%@AE@%%@CR:SETENV-1  @%%@EH@%%@NL@%
  349. %@NL@%
  350. %@AB@%SETENV %@AI@%filename%@AE@%«%@AI@%environmentsize%@AE@%»%@NL@%
  351. %@NL@%
  352. %@NL@%
  353. %@2@%%@AB@%EXEPACK%@CR:EXEPACK   @%%@AE@%%@EH@%%@QR:exepack@%%@NL@%
  354. ───────────────────────────────────────────────────────────────────────────%@NL@%
  355. %@3@%%@AB@%Command-Line Syntax%@AE@%%@CR:EXEPACK-1 @%%@EH@%%@NL@%
  356. %@NL@%
  357. %@AB@%EXEPACK %@AI@%exefile%@AE@% %@AI@%packedfile%@AE@%%@NL@%
  358. %@NL@%
  359. %@NL@%
  360. %@2@%%@AB@%EXEMOD%@CR:EXEMOD    @%%@AE@%%@EH@%%@QR:exemod@%%@NL@%
  361. ───────────────────────────────────────────────────────────────────────────%@NL@%
  362. %@3@%%@AB@%Command-Line Syntax%@AE@%%@CR:EXEMOD-1  @%%@EH@%%@NL@%
  363. %@NL@%
  364. %@AB@%EXEMOD %@AI@%exefile%@AE@% «%@AI@%options%@AE@%»%@NL@%
  365. %@NL@%
  366. %@NL@%
  367. %@3@%%@AB@%Options%@AE@%%@CR:EXEMOD-2  @%%@EH@%%@NL@%
  368. %@NL@%
  369. %@TH: 008   558 01 20 56 @%%@AB@%Option              Effect%@AE@%───────────────────────────────────────────────────────────────────────────%@AB@%/STACK %@AI@%hexnum%@AE@%       Sets the stack size by setting the initial value of %@AB@%SP%@AE@%%@QR:exemod /stack@%                    to %@AI@%hexnum%@AE@%%@AB@%/MIN %@AI@%hexnum%@AE@%         Sets the minimum allocation value to %@AI@%hexnum%@AE@% paragraphs%@QR:exemod /min@%%@AB@%/MAX %@AI@%hexnum%@AE@%         Sets the maximum allocation value to %@AI@%hexnum%@AE@% paragraphs%@QR:exemod /max@%%@TE: 008   558 01 20 56 @%
  370. %@NL@%
  371. %@2@%%@AB@%ERROUT%@CR:ERROUT    @%%@AE@%%@EH@%%@QR:errout@%%@NL@%
  372. ───────────────────────────────────────────────────────────────────────────%@NL@%
  373. %@3@%%@AB@%Command-Line Syntax%@AE@%%@CR:ERROUT-1  @%%@EH@%%@NL@%
  374. %@NL@%
  375. %@AB@%ERROUT%@AE@% «%@AB@%/f %@AI@%stderrfile%@AE@%» %@AI@%command%@AE@% «%@AB@%> %@AI@%stdoutfile%@AE@%»%@NL@%
  376. %@NL@%
  377. %@NL@%
  378. %@CR:12a       @%%@NL@%
  379. %@1@%%@AB@%Directives%@CR:Directives@%%@AE@%%@EH@%%@QR:directives@%%@NL@%
  380. %@NL@%
  381. ───────────────────────────────────────────────────────────────────────────%@NL@%
  382. %@NL@%
  383. Directives%@BO:      a2c0@%%@NL@%
  384. %@NL@%
  385. Operators%@BO:      f5e7@%%@NL@%
  386. %@NL@%
  387. %@NL@%
  388. %@CR:12b       @%%@NL@%
  389. %@AB@%Topical Cross-Reference for Directives%@AE@%%@NL@%
  390. %@NL@%
  391. %@AU@%Simplified%@AE@%       %@AU@%Code Labels%@AE@%   %@AU@%Repeat Blocks%@AE@%      %@AU@%Processor%@AE@%%@NL@%
  392. %@AU@%Segment%@AB@%          PROC%@BO:      e5f4@%         REPT%@BO:      eb64@%              .8086%@BO:      a8a6@%%@AE@%%@NL@%
  393. %@AB@%.MODEL%@BO:      e140@%          ENDP%@BO:      be2a@%         IRP%@BO:      d96b@%               .286%@BO:      a500@%%@AE@%%@NL@%
  394. %@AB@%.CODE%@BO:      ad2f@%           LABEL%@BO:      dc57@%        IRPC%@BO:      daf8@%              .286P%@BO:      a59c@%%@AE@%%@NL@%
  395. %@AB@%.STACK%@BO:      efa5@%          ALIGN%@BO:      aa8a@%        ENDM%@BO:      bd2e@%              .386%@BO:      a6d3@%%@AE@%%@NL@%
  396. %@AB@%.DATA%@BO:      b373@%           EVEN%@BO:      c95b@%                            .386P%@BO:      a76f@%%@AE@%%@NL@%
  397. %@AB@%.DATA?%@BO:      b43f@%          ORG%@BO:      e308@%          %@AU@%Conditional%@AB@%        .8087%@BO:      a9a0@%%@AE@%%@NL@%
  398. %@AB@%.FARDATA%@BO:      cb8d@%                      %@AU@%Assembly%@AB@%           .287%@BO:      a648@%%@AE@%%@NL@%
  399. %@AB@%.FARDATA?%@BO:      cc8b@%       %@AU@%Scope%@AB@%         IF1%@BO:      cfdd@%               .387%@BO:      a81b@%%@AE@%%@NL@%
  400. %@AB@%.CONST%@BO:      b21d@%          PUBLIC%@BO:      e735@%       IF2%@BO:      d079@%%@AE@%%@NL@%
  401. %@AB@%DOSSEG%@BO:      b50f@%          EXTRN%@BO:      ca9c@%        IF%@BO:      ce59@%                %@AU@%Listing Control%@AE@%%@NL@%
  402.                  %@AB@%COMM%@BO:      aea5@%         IFE%@BO:      d427@%               TITLE%@BO:      f318@%%@AE@%%@NL@%
  403. %@AU@%Segment%@AB@%          INCLUDELIB%@BO:      d8b1@%   IFB%@BO:      d115@%               SUBTTL%@BO:      f221@%%@AE@%%@NL@%
  404. %@AB@%SEGMENT%@BO:      ecb6@%                       IFNB%@BO:      d646@%              PAGE%@BO:      e41b@%%@AE@%%@NL@%
  405. %@AB@%ENDS%@BO:      befa@%            %@AU@%Structure%@AB@%     IFDEF%@BO:      d1da@%             .LIST%@BO:      de54@%%@AE@%%@NL@%
  406. %@AB@%GROUP%@BO:      cd8d@%           %@AU@%and Record%@AB@%    IFNDEF%@BO:      d711@%            .XLIST%@BO:      f557@%%@AE@%%@NL@%
  407. %@AB@%ASSUME%@BO:      abb4@%          RECORD%@BO:      e96d@%       IFDIF/IFDIFI%@BO:      d2d3@%      .LFCOND%@BO:      ddc2@%%@AE@%%@NL@%
  408. %@AB@%DOSSEG%@BO:      b50f@%          STRUC%@BO:      f0e2@%        IFIDN/IFIDNI%@BO:      d4f1@%      .SFCOND%@BO:      eee2@%%@AE@%%@NL@%
  409. %@AB@%END%@BO:      bbda@%             ENDS%@BO:      befa@%         ELSE%@BO:      bb25@%              .TFCOND%@BO:      f293@%%@AE@%%@NL@%
  410. %@AB@%.ALPHA%@BO:      ab3f@%                        ENDIF%@BO:      bca2@%             .LALL%@BO:      dd44@%%@AE@%%@NL@%
  411. %@AB@%.SEQ%@BO:      ee61@%            %@AU@%Macros%@AB@%                           .SALL%@BO:      ec3c@%%@AE@%%@NL@%
  412.                  %@AB@%MACRO%@BO:      dfe4@%        %@AU@%Conditional Error%@AB@%  .XALL%@BO:      f38d@%%@AE@%%@NL@%
  413. %@AU@%Data Allocation%@AB@%  ENDM%@BO:      bd2e@%         .ERR%@BO:      c1c8@%              .CREF%@BO:      b2e0@%%@AE@%%@NL@%
  414. %@AB@%DB%@BO:      b591@%              EXITM%@BO:      c9d9@%        .ERR1%@BO:      c22b@%             .XCREF%@BO:      f442@%%@AE@%%@NL@%
  415. %@AB@%DW%@BO:      b673@%              LOCAL%@BO:      deea@%        .ERR2%@BO:      c2a0@%%@AE@%%@NL@%
  416. %@AB@%DD%@BO:      b75f@%              PURGE%@BO:      e827@%        .ERRE%@BO:      c59a@%             %@AU@%Miscellaneous%@AE@%%@NL@%
  417. %@AB@%DF%@BO:      b851@%                            .ERRNZ%@BO:      c8b5@%            COMMENT%@BO:      b10c@%%@AE@%%@NL@%
  418. %@AB@%DQ%@BO:      b940@%              %@AU@%Equates%@AB@%       .ERRB%@BO:      c315@%             %OUT%@BO:      e391@%%@AE@%%@NL@%
  419. %@AB@%DT%@BO:      ba41@%              EQU%@BO:      c031@%          .ERRNB%@BO:      c76d@%            .RADIX%@BO:      e8ca@%%@AE@%%@NL@%
  420. %@AB@%LABEL%@BO:      dc57@%           =%@BO:      a3b3@%            .ERRDEF%@BO:      c3b3@%           END%@BO:      bbda@%%@AE@%%@NL@%
  421. %@AB@%ALIGN%@BO:      aa8a@%                         .ERRNDEF%@BO:      c812@%          INCLUDE%@BO:      d7dd@%%@AE@%%@NL@%
  422. %@AB@%EVEN%@BO:      c95b@%                          .ERRDIF/.ERRDIFI%@BO:      c476@%  INCLUDELIB%@BO:      d8b1@%%@AE@%%@NL@%
  423. %@AB@%ORG%@BO:      e308@%                           .ERRIDN/.ERRIDNI%@BO:      c649@%  NAME%@BO:      e259@%%@AE@%%@NL@%
  424. %@NL@%
  425. %@NL@%
  426. %@AB@%Topical Cross-Reference for Operators%@AE@%%@QR:operators@%%@NL@%
  427. %@NL@%
  428. %@AU@%Arithmetic%@AE@%       %@AU@%Logical%@AE@%       %@AU@%Type%@AE@%               %@AU@%Relational%@AE@%%@NL@%
  429. %@AB@%+%@BO:      f7dd@%               %@AU@%and Shift%@AB@%     HIGH%@BO:     10471@%              EQ%@BO:     101b1@%%@AE@%%@NL@%
  430. %@AB@%-%@BO:      f885@%               AND%@BO:      ffe7@%          LOW%@BO:     106c9@%               NE%@BO:     109f4@%%@AE@%%@NL@%
  431. %@AB@%*%@BO:      f688@%               OR%@BO:     10bed@%           PTR%@BO:     10cc5@%               GT%@BO:     10388@%%@AE@%%@NL@%
  432. %@AB@%/%@BO:      f730@%               XOR%@BO:     1143f@%          SHORT%@BO:     10eec@%             GE%@BO:     10293@%%@AE@%%@NL@%
  433. %@AB@%MOD%@BO:     10931@%             NOT%@BO:     10ada@%          SIZE%@BO:     11095@%              LT%@BO:     1074d@%%@AE@%%@NL@%
  434. %@AB@%.%@BO:      fb0f@%               SHL%@BO:     10e07@%          THIS%@BO:     11174@%              LE%@BO:     104f8@%%@AE@%%@NL@%
  435. %@AB@%[]%@BO:      fbb8@%              SHR%@BO:     10fc0@%          TYPE%@BO:     1124b@%%@AE@%%@NL@%
  436.                                %@AB@%.TYPE%@BO:     112cd@%             %@AU@%Miscellaneous%@AE@%%@NL@%
  437. %@AU@%Macro%@AE@%            %@AU@%Record%@AB@%                           ;%@BO:      fdc1@%%@AE@%%@NL@%
  438. %@AB@%<>%@BO:      fc6f@%              MASK%@BO:     10833@%         %@AU@%Segment%@AB@%            DUP%@BO:     100c2@%%@AE@%%@NL@%
  439. %@AB@%!%@BO:      fd00@%               WIDTH%@BO:     1136b@%         :%@BO:      f9a1@%%@AE@%%@NL@%
  440. %@AB@%;;%@BO:      fe30@%                            SEG%@BO:     10d84@%%@AE@%%@NL@%
  441. %@AB@%%%@BO:      fecc@%                             OFFSET%@BO:     10b65@%%@AE@%%@NL@%
  442. %@AB@%&%@BO:      ff53@%%@AE@%%@NL@%
  443. %@NL@%
  444. %@NL@%
  445. %@CR:13        @%%@NL@%
  446. %@2@%%@AB@%Directives%@AE@%%@CR:Di-Entries@%%@EH@%%@QR:directives@%%@QR:directive@%%@QR:di-entries@%%@QR:di-entry@%%@QR:di entries@%%@QR:di entry@%%@NL@%
  447. ───────────────────────────────────────────────────────────────────────────%@NL@%
  448. %@NL@%
  449. %@AI@%name%@AE@% = %@AI@%expression%@AE@%%@CR:=         @%%@NL@%
  450.      Assigns the numeric value of %@AI@%expression%@AE@% to %@AI@%name%@AE@%. The symbol may be
  451.      redefined later.%@NL@%
  452. %@NL@%
  453. %@AB@%.186%@AE@%%@CR:.186      @%%@QR:.186@%%@QR:186@%%@NL@%
  454.      Enables assembly of instructions for the 80186 processor.%@NL@%
  455. %@NL@%
  456. %@AB@%.286%@AE@%%@CR:.286      @%%@QR:.286@%%@QR:286@%%@NL@%
  457.      Enables assembly of nonprivileged instructions for the 80286
  458.      processor.%@NL@%
  459. %@NL@%
  460. %@AB@%.286P%@AE@%%@CR:.286P     @%%@QR:.286P@%%@QR:286P@%%@NL@%
  461.      Enables assembly of all instructions (including privileged) for the
  462.      80286 processor.%@NL@%
  463. %@NL@%
  464. %@AB@%.287%@AE@%%@CR:.287      @%%@QR:.287@%%@QR:287@%%@NL@%
  465.      Enables assembly of instructions for the 80287 coprocessor.%@NL@%
  466. %@NL@%
  467. %@AB@%.386%@AE@%%@CR:.386      @%%@QR:.386@%%@QR:386@%%@NL@%
  468.      Enables assembly of nonprivileged instructions for the 80386
  469.      processor.%@NL@%
  470. %@NL@%
  471. %@AB@%.386P%@AE@%%@CR:.386P     @%%@QR:.386P@%%@QR:386P@%%@NL@%
  472.      Enables assembly of all instructions (including privileged) for the
  473.      80386 processor.%@NL@%
  474. %@NL@%
  475. %@AB@%.387%@AE@%%@CR:.387      @%%@QR:.387@%%@QR:387@%%@NL@%
  476.      Enables assembly of instructions for the 80387 coprocessor.%@NL@%
  477. %@NL@%
  478. %@AB@%.8086%@AE@%%@CR:.8086     @%%@QR:.8086@%%@QR:8086@%%@NL@%
  479.      Enables assembly of 8086 instructions (and the identical 8088
  480.      instructions); disables assembly of instructions of later processors.
  481.      This is the default mode.%@NL@%
  482. %@NL@%
  483. %@AB@%.8087%@AE@%%@CR:.8087     @%%@QR:.8087@%%@QR:8087@%%@NL@%
  484.      Enables assembly of 8087 instructions and disables assembly of
  485.      instructions available only with later coprocessors. This is the
  486.      default mode.%@NL@%
  487. %@NL@%
  488. %@AB@%ALIGN %@AI@%number%@AE@%%@CR:ALIGN     @%%@QR:align@%%@NL@%
  489.      Aligns the next variable or instruction on a byte that is a multiple
  490.      of %@AI@%number%@AE@%.%@NL@%
  491. %@NL@%
  492. %@AB@%.ALPHA%@AE@%%@CR:.ALPHA    @%%@QR:.alpha@%%@QR:alpha@%%@NL@%
  493.      Orders segments alphabetically.%@NL@%
  494. %@NL@%
  495. %@AB@%ASSUME %@AI@%segregister%@AB@%:%@AI@%name%@AE@%«,%@AI@%segregister%@AB@%:%@AI@%name%@AE@%»...%@CR:ASSUME    @%%@QR:assume@%%@NL@%
  496.      Selects %@AI@%segregister%@AE@% to be the default segment register for all symbols
  497.      in the named segment or group. If name is %@AB@%NOTHING%@AE@%, no segment register
  498.      is associated with the segment.%@NL@%
  499. %@CR:14        @%%@NL@%
  500. %@AB@%.CODE%@AE@% «%@AI@%name%@AE@%»%@CR:.CODE     @%%@QR:.code@%%@QR:code@%%@NL@%
  501.      When used with %@AB@%.MODEL%@AE@%, indicates the start of a code segment, which
  502.      may have %@AI@%name%@AE@% for medium, large, and huge models (default segment name
  503.      %@AB@%_TEXT%@AE@% for small and compact models, or %@AI@%module%@AB@%_TEXT%@AE@% for other models).%@NL@%
  504. %@NL@%
  505. %@AB@%COMM %@AI@%definition%@AE@%«,%@AI@%definition%@AE@%»...%@CR:COMM      @%%@QR:comm@%%@NL@%
  506.      Creates a communal variable with the attributes specified in
  507.      %@AI@%definition%@AE@%. Each %@AI@%definition%@AE@% has the following form:%@NL@%
  508. %@NL@%
  509.      «%@AB@%NEAR%@AE@%|%@AB@%FAR%@AE@%» %@AI@%label%@AE@%:%@AI@%size%@AE@%«:%@AI@%count%@AE@%»%@NL@%
  510. %@NL@%
  511.      The %@AI@%label%@AE@% is the name of the variable. The %@AI@%size%@AE@% can be any size
  512.      specifier (%@AB@%BYTE%@AE@%, %@AB@%WORD%@AE@%, etc.). The %@AI@%count%@AE@% specifies the number of
  513.      data objects (one is the default).%@NL@%
  514. %@NL@%
  515. %@AB@%COMMENT %@AI@%delimiter%@AE@% «%@AI@%text%@AE@%»%@CR:COMMENT   @%%@QR:comment@%%@NL@%
  516. %@AI@%text%@AE@%%@NL@%
  517. %@AI@%delimiter%@AE@% «%@AI@%text%@AE@%»%@NL@%
  518.      Treats all text between or on the same line as the %@AI@%delimiters%@AE@%
  519.      as a comment.%@NL@%
  520. %@NL@%
  521. %@AB@%.CONST%@AE@%%@CR:.CONST    @%%@QR:.const@%%@QR:const@%%@NL@%
  522.      When used with %@AB@%.MODEL%@AE@%, starts a constant data segment (with segment
  523.      name %@AB@%CONST%@AE@%).%@NL@%
  524. %@NL@%
  525. %@AB@%.CREF%@AE@%%@CR:.CREF     @%%@QR:.cref@%%@QR:cref@%%@NL@%
  526.      Restores listing of symbols in the cross-reference listing file.%@NL@%
  527. %@NL@%
  528. %@AB@%.DATA%@AE@%%@CR:.DATA     @%%@QR:data@%%@QR:.data@%%@NL@%
  529.      When used with %@AB@%.MODEL%@AE@%, starts a near data segment for initialized data
  530.      (segment name %@AB@%_DATA%@AE@%).%@NL@%
  531. %@NL@%
  532. %@AB@%.DATA?%@AE@%%@CR:.DATA?    @%%@QR:data?@%%@QR:.data?@%%@NL@%
  533.      When used with %@AB@%.MODEL%@AE@%, starts a near data segment for uninitialized
  534.      data (segment name %@AB@%_BSS%@AE@%).%@NL@%
  535. %@NL@%
  536. %@AB@%DOSSEG%@AE@%%@CR:DOSSEG    @%%@QR:dosseg@%%@NL@%
  537.      Orders segments according to the DOS segment convention.%@NL@%
  538. %@NL@%
  539. «%@AI@%name%@AE@%» %@AB@%DB %@AI@%initializer%@AE@% «,%@AI@%initializer%@AE@%»...%@CR:DB        @%%@QR:db@%%@NL@%
  540.      Allocates and optionally initializes a byte of storage for each
  541.      %@AI@%initializer%@AE@%.%@NL@%
  542. %@NL@%
  543. «%@AI@%name%@AE@%» %@AB@%DW %@AI@%initializer%@AE@% «,%@AI@%initializer%@AE@%»...%@CR:DW        @%%@QR:dw@%%@NL@%
  544.      Allocates and optionally initializes a word (2 bytes) of storage for
  545.      each %@AI@%initializer%@AE@%.%@NL@%
  546. %@NL@%
  547. «%@AI@%name%@AE@%» %@AB@%DD %@AI@%initializer%@AE@% «,%@AI@%initializer%@AE@%»...%@CR:DD        @%%@QR:dd@%%@NL@%
  548.      Allocates and optionally initializes a doubleword (4 bytes) of storage
  549.      for each %@AI@%initializer%@AE@%.%@NL@%
  550. %@NL@%
  551. «%@AI@%name%@AE@%» %@AB@%DF %@AI@%initializer%@AE@% «,%@AI@%initializer%@AE@%»...%@CR:DF        @%%@QR:df@%%@NL@%
  552.      Allocates and optionally initializes a farword (6 bytes) of storage
  553.      for each %@AI@%initializer%@AE@%.%@NL@%
  554. %@NL@%
  555. «%@AI@%name%@AE@%» %@AB@%DQ %@AI@%initializer%@AE@% «,%@AI@%initializer%@AE@%»...%@CR:DQ        @%%@QR:dq@%%@NL@%
  556.      Allocates and optionally initializes a quadword (8 bytes) of storage
  557.      for each %@AI@%initializer%@AE@%.%@NL@%
  558. %@CR:15        @%%@NL@%
  559. «%@AI@%name%@AE@%» %@AB@%DT %@AI@%initializer%@AE@% «,%@AI@%initializer%@AE@%»...%@CR:DT        @%%@QR:dt@%%@NL@%
  560.      Allocates and optionally initializes 10 bytes of storage for each
  561.      %@AI@%initializer%@AE@%.%@NL@%
  562. %@NL@%
  563. %@AB@%ELSE%@AE@%%@CR:ELSE      @%%@QR:else@%%@NL@%
  564.      Marks the beginning of an alternate block within a conditional block.
  565.      See %@AB@%IF%@AE@%%@BO:      ce59@%.%@NL@%
  566. %@NL@%
  567. %@AB@%END%@AE@% «%@AI@%startaddress%@AE@%»%@CR:END       @%%@QR:end@%%@NL@%
  568.      Marks the end of a module and, optionally, sets the program entry
  569.      point to %@AI@%startaddress%@AE@%.%@NL@%
  570. %@NL@%
  571. %@AB@%ENDIF%@AE@%%@CR:ENDIF     @%%@QR:endif@%%@NL@%
  572.      Terminates a conditional block. See %@AB@%IF%@AE@%%@BO:      ce59@%.%@NL@%
  573. %@NL@%
  574. %@AB@%ENDM%@AE@%%@CR:ENDM      @%%@QR:endm@%%@NL@%
  575.      Terminates a macro or repeat block. See %@AB@%MACRO%@AE@%%@BO:      dfe4@%, %@AB@%REPT%@AE@%%@BO:      eb64@%, %@AB@%IRP%@AE@%%@BO:      d96b@%, or %@AB@%IRPC%@AE@%%@BO:      daf8@%.%@NL@%
  576. %@NL@%
  577. %@AI@%name%@AB@% ENDP%@AE@%%@CR:ENDP      @%%@QR:endp@%%@NL@%
  578.      Marks the end of procedure %@AI@%name%@AE@% previously begun with %@AB@%PROC%@AE@%.
  579.      See %@AB@%PROC%@AE@%%@BO:      e5f4@%.%@NL@%
  580. %@NL@%
  581. %@AI@%name%@AE@% %@AB@%ENDS%@AE@%%@CR:ENDS      @%%@QR:ends@%%@NL@%
  582.      Marks the end of segment %@AI@%name%@AE@% or of structure %@AI@%name%@AE@% previously begun
  583.      with %@AB@%SEGMENT%@AE@% or %@AB@%STRUC%@AE@%. See %@AB@%SEGMENT%@AE@%%@BO:      ecb6@% and %@AB@%STRUC%@AE@%%@BO:      f0e2@%.%@NL@%
  584. %@NL@%
  585. %@AI@%name%@AE@% %@AB@%EQU%@AE@% «%@AB@%<%@AE@%»%@AI@%expression%@AE@%«%@AB@%>%@AE@%»%@CR:EQU       @%%@QR:equ@%%@NL@%
  586.      Assigns %@AI@%expression%@AE@% to %@AI@%name%@AE@%. If %@AI@%expression%@AE@% is enclosed in angle
  587.      brackets, it will be interpreted as a text expression. Numeric
  588.      equates defined with %@AB@%EQU%@AE@% cannot be redefined, but text equates
  589.      can be redefined.%@NL@%
  590. %@NL@%
  591. %@AB@%.ERR%@AE@%%@CR:.ERR      @%%@QR:.err@%%@QR:err@%%@NL@%
  592.      Generates an error.%@NL@%
  593. %@NL@%
  594. %@AB@%.ERR1%@AE@%%@CR:.ERR1     @%%@QR:.err1@%%@QR:err1@%%@NL@%
  595.      Generates an error on Pass 1 only.%@NL@%
  596. %@NL@%
  597. %@AB@%.ERR2%@AE@%%@CR:.ERR2     @%%@QR:.err2@%%@QR:err2@%%@NL@%
  598.      Generates an error on Pass 2 only.%@NL@%
  599. %@NL@%
  600. %@AB@%.ERRB <%@AI@%argument%@AB@%>%@AE@%%@CR:.ERRB     @%%@QR:.errb@%%@QR:errb@%%@NL@%
  601.      Generates an error if %@AI@%argument%@AE@% is blank.%@NL@%
  602. %@NL@%
  603. %@AB@%.ERRDEF %@AI@%name%@AE@%%@CR:.ERRDEF   @%%@QR:.errdef@%%@QR:errdef@%%@NL@%
  604.      Generates an error if %@AI@%name%@AE@% is a previously defined label, variable,
  605.      or symbol.%@NL@%
  606. %@NL@%
  607. %@AB@%.ERRDIF%@AE@%«%@AB@%I%@AE@%» %@AB@%<%@AI@%argument1%@AB@%>, <%@AI@%argument2%@AB@%>%@AE@%%@CR:.ERRDIF   @%%@QR:errdif@%%@QR:.errdif@%%@NL@%
  608.      Generates an error if the arguments are different. If %@AB@%I%@AE@% is given, the
  609.      argument comparison is case insensitive.%@NL@%
  610. %@NL@%
  611. %@AB@%.ERRE %@AI@%expression%@AE@%%@CR:.ERRE     @%%@QR:.erre@%%@QR:erre@%%@NL@%
  612.      Generates an error if %@AI@%expression%@AE@% is false (0).%@NL@%
  613. %@CR:16        @%%@NL@%
  614. %@AB@%.ERRIDN%@AE@%«%@AB@%I%@AE@%»%@AB@% <%@AI@%argument1%@AB@%>, <%@AI@%argument2%@AB@%>%@AE@%%@CR:.ERRIDN   @%%@QR:.erridn@%%@QR:erridn@%%@NL@%
  615.      Generates an error if the arguments are identical. If %@AB@%I%@AE@% is given,
  616.      the argument comparison is case insensitive.%@NL@%
  617. %@NL@%
  618. %@AB@%.ERRNB <%@AI@%argument%@AB@%>%@AE@%%@CR:.ERRNB    @%%@QR:.errnb@%%@QR:errnb@%%@NL@%
  619.      Generates an error if %@AI@%argument%@AE@% is not blank.%@NL@%
  620. %@NL@%
  621. %@AB@%.ERRNDEF %@AI@%name%@AE@%%@CR:.ERRNDEF  @%%@QR:.errndef@%%@QR:errndef@%%@NL@%
  622.      Generates an error if %@AI@%name%@AE@% has not been defined.%@NL@%
  623. %@NL@%
  624. %@AB@%.ERRNZ %@AI@%expression%@AE@%%@CR:.ERRNZ    @%%@QR:.errnz@%%@QR:errnz@%%@NL@%
  625.      Generates an error if %@AI@%expression%@AE@% is true (nonzero).%@NL@%
  626. %@NL@%
  627. %@AB@%EVEN%@AE@%%@CR:EVEN      @%%@QR:even@%%@NL@%
  628.      Aligns the next variable or instruction on an even byte.%@NL@%
  629. %@NL@%
  630. %@AB@%EXITM%@AE@%%@CR:EXITM     @%%@QR:exitm@%%@NL@%
  631.      Terminates expansion of the current repeat or macro block and begins
  632.      assembly of the next statement outside the block.%@NL@%
  633. %@NL@%
  634. %@AB@%EXTRN %@AI@%name:type%@AE@% «%@AB@%,%@AI@%name:type%@AE@%»...%@CR:EXTRN     @%%@QR:extrn@%%@NL@%
  635.      Defines one or more external variables, labels, or symbols called %@AI@%name%@AE@%
  636.      whose type is %@AI@%type%@AE@%.%@NL@%
  637. %@NL@%
  638. %@AB@%.FARDATA %@AE@%«%@AI@%name%@AE@%»%@CR:.FARDATA  @%%@QR:.fardata@%%@QR:fardata@%%@NL@%
  639.      When used with %@AB@%.MODEL%@AE@%, starts a far data segment for initialized data
  640.      (segment name %@AB@%FAR_DATA%@AE@% or %@AI@%name%@AE@%).%@NL@%
  641. %@NL@%
  642. %@AB@%.FARDATA? %@AE@%«%@AI@%name%@AE@%»%@CR:.FARDATA? @%%@QR:.fardata?@%%@QR:fardata?@%%@NL@%
  643.      When used with %@AB@%.MODEL%@AE@%, starts a far data segment for uninitialized
  644.      data (segment name %@AB@%FAR_BSS%@AE@% or %@AI@%name%@AE@%).%@NL@%
  645. %@NL@%
  646. %@AI@%name%@AE@% %@AB@%GROUP %@AI@%segment%@AE@%«,%@AI@%segment%@AE@%»...%@CR:GROUP     @%%@QR:group@%%@NL@%
  647.      Add the specified %@AI@%segments%@AE@% to the group called %@AI@%name%@AE@%.%@NL@%
  648. %@NL@%
  649. %@AB@%IF %@AI@%expression%@AE@%%@CR:IF        @%%@QR:if@%%@NL@%
  650. %@AI@%ifstatements%@AE@%%@NL@%
  651. «%@AB@%ELSE%@AE@%%@QR:else@%%@NL@%
  652. %@AI@%elsestatements%@AE@%»%@NL@%
  653. %@AB@%ENDIF%@AE@%%@QR:endif@%%@NL@%
  654.      Grants assembly of %@AI@%ifstatements%@AE@% if %@AI@%expression%@AE@% is true (nonzero).
  655.      Optionally assembles %@AI@%elsestatements%@AE@% if expression is false (0).%@NL@%
  656. %@NL@%
  657. %@AB@%IF1%@AE@%%@CR:IF1       @%%@QR:if1@%%@NL@%
  658.      Grants assembly on Pass 1 only. See %@AB@%IF%@AE@%%@BO:      ce59@% for complete syntax.%@NL@%
  659. %@NL@%
  660. %@AB@%IF2%@AE@%%@CR:IF2       @%%@QR:if2@%%@NL@%
  661.      Grants assembly on Pass 2 only. See %@AB@%IF%@AE@%%@BO:      ce59@% for complete syntax.%@NL@%
  662. %@NL@%
  663. %@AB@%IFB <%@AI@%argument%@AB@%>%@AE@%%@CR:IFB       @%%@QR:ifb@%%@NL@%
  664.      Grants assembly if %@AI@%argument%@AE@% is blank. See %@AB@%IF%@AE@%%@BO:      ce59@% for complete syntax.%@NL@%
  665. %@NL@%
  666. %@AB@%IFDEF %@AI@%name%@AE@%%@CR:IFDEF     @%%@QR:ifdef@%%@NL@%
  667.      Grants assembly if %@AI@%name%@AE@% is a previously defined label, variable, or
  668.      symbol. See %@AB@%IF%@AE@%%@BO:      ce59@% for complete syntax.%@NL@%
  669. %@CR:17        @%%@NL@%
  670. %@AB@%IFDIF%@AE@%«%@AB@%I%@AE@%» %@AB@%<%@AI@%argument1%@AB@%>%@AE@%, %@AB@%<%@AI@%argument2%@AB@%>%@AE@%%@CR:IFDIF     @%%@QR:ifdif@%%@NL@%
  671.      Grants assembly if the arguments are different. If %@AB@%I%@AE@% is given, the
  672.      argument comparison is case insensitive.See %@AB@%IF%@AE@%%@BO:      ce59@% for complete syntax.%@NL@%
  673. %@NL@%
  674. %@AB@%IFE %@AI@%expression%@AE@%%@CR:IFE       @%%@QR:ife@%%@NL@%
  675.      Grants assembly if %@AI@%expression%@AE@% is false (0). See %@AB@%IF%@AE@%%@BO:      ce59@% for complete
  676.      syntax.%@NL@%
  677. %@NL@%
  678. %@AB@%IFIDN%@AE@%«%@AB@%I%@AE@%» %@AB@%<%@AI@%argument1%@AB@%>%@AE@%, %@AB@%<%@AI@%argument2%@AB@%>%@AE@%%@CR:IFIDN     @%%@QR:ifidn@%%@NL@%
  679.      Grants assembly if the arguments are identical. If %@AB@%I%@AE@% is given, the
  680.      argument comparison is case insensitive. See %@AB@%IF%@AE@%%@BO:      ce59@% for complete syntax.%@NL@%
  681. %@NL@%
  682. %@AB@%IFNB <%@AI@%argument%@AB@%>%@AE@%%@CR:IFNB      @%%@QR:ifnb@%%@NL@%
  683.      Grants assembly if %@AI@%argument%@AE@% is not blank. See %@AB@%IF%@AE@%%@BO:      ce59@% for complete syntax.%@NL@%
  684. %@NL@%
  685. %@AB@%IFNDEF %@AI@%name%@AE@%%@CR:IFNDEF    @%%@QR:ifndef@%%@NL@%
  686.      Grants assembly if %@AI@%name%@AE@% has not been defined. See %@AB@%IF%@AE@%%@BO:      ce59@% for complete
  687.      syntax.%@NL@%
  688. %@NL@%
  689. %@AB@%INCLUDE %@AI@%filespec%@AE@%%@CR:INCLUDE   @%%@QR:include@%%@NL@%
  690.      Inserts source code from the source file given by %@AI@%filespec%@AE@% into the
  691.      current source file during assembly.%@NL@%
  692. %@NL@%
  693. %@AB@%INCLUDELIB %@AI@%library%@AE@%%@CR:INCLUDELIB@%%@QR:includelib@%%@NL@%
  694.      Informs the linker that the current module should be linked with
  695.      %@AI@%library%@AE@%.%@NL@%
  696. %@NL@%
  697. %@AB@%IRP %@AI@%parameter%@AE@%,%@AB@%<%@AI@%argument%@AE@%«,%@AI@%argument%@AE@%»...%@AB@%>%@AE@%%@CR:IRP       @%%@QR:irp@%%@NL@%
  698. %@AI@%statements%@AE@%%@NL@%
  699. %@AB@%ENDM%@AE@%%@QR:endm@%%@NL@%
  700.      Marks a block that will be repeated for as many %@AI@%arguments%@AE@% as are
  701.      given, with the current %@AI@%argument%@AE@% replacing %@AI@%parameter%@AE@% on each
  702.      repetition.%@NL@%
  703. %@NL@%
  704. %@AB@%IRPC %@AI@%parameter%@AB@%,%@AI@%string%@AE@%%@CR:IRPC      @%%@QR:irpc@%%@NL@%
  705. %@AI@%statements%@AE@%%@NL@%
  706. %@AB@%ENDM%@AE@%%@QR:endm@%%@NL@%
  707.      Marks a block that will be repeated for as many characters as there
  708.      are in %@AI@%string%@AE@%, with the current character replacing %@AI@%parameter%@AE@% on each
  709.      repetition.%@NL@%
  710. %@NL@%
  711. %@AI@%name%@AE@% %@AB@%LABEL %@AI@%type%@AE@%%@CR:LABEL     @%%@QR:label@%%@NL@%
  712.      Creates a new variable or label by assigning the current location-
  713.      counter value and the given %@AI@%type%@AE@% to %@AI@%name%@AE@%.%@NL@%
  714. %@NL@%
  715. %@AB@%.LALL%@AE@%%@CR:.LALL     @%%@QR:.lall@%%@QR:lall@%%@NL@%
  716.      Starts listing of all statements in macros.%@NL@%
  717. %@NL@%
  718. %@AB@%.LFCOND%@AE@%%@CR:.LFCOND   @%%@QR:.lfcond@%%@QR:lfcond@%%@NL@%
  719.      Starts listing of statements in false conditional blocks.%@NL@%
  720. %@NL@%
  721. %@AB@%.LIST%@AE@%%@CR:.LIST     @%%@QR:.list@%%@QR:list@%%@NL@%
  722.      Starts listing of statements. This is the default.%@NL@%
  723. %@CR:18        @%%@NL@%
  724. %@AB@%LOCAL %@AI@%localname%@AE@% «%@AB@%,%@AI@%localname%@AE@%»...%@CR:LOCAL     @%%@QR:local@%%@NL@%
  725.      Declares %@AI@%localname%@AE@% within a macro as a placeholder for an actual name
  726.      to be created when the macro is expanded.%@NL@%
  727. %@NL@%
  728. %@AI@%name%@AE@% %@AB@%MACRO%@AE@% «%@AI@%parameter%@AE@% «%@AB@%,%@AI@%parameter%@AE@%»...»%@CR:MACRO     @%%@NL@%
  729. %@AI@%statements%@AE@%%@NL@%
  730. %@AB@%ENDM%@AE@%%@QR:endm@%%@NL@%
  731.      Marks a macro block called %@AI@%name%@AE@% and establishes %@AI@%parameters%@AE@% as
  732.      placeholders for arguments passed when the macro is called.%@NL@%
  733. %@NL@%
  734. %@AB@%.MODEL %@AI@%memorymodel%@AE@%%@CR:.MODEL    @%%@QR:.model@%%@QR:model@%%@NL@%
  735.      Initializes the program memory model. The %@AI@%memorymodel%@AE@% can be %@AB@%SMALL%@AE@%,
  736.      %@AB@%COMPACT%@AE@%, %@AB@%MEDIUM%@AE@%, %@AB@%LARGE%@AE@%, or %@AB@%HUGE%@AE@%.%@NL@%
  737. %@NL@%
  738. %@AB@%NAME %@AI@%modulename%@AE@%%@CR:NAME      @%%@QR:name@%%@NL@%
  739.      Ignored in Version 5.0. The module name is always the base name of the
  740.      source file.%@NL@%
  741. %@NL@%
  742. %@AB@%ORG %@AI@%expression%@AE@%%@CR:ORG       @%%@QR:org@%%@NL@%
  743.      Sets the location counter to %@AI@%expression%@AE@%.%@NL@%
  744. %@NL@%
  745. %@AB@%%OUT %@AI@%text%@AE@%%@CR:%OUT      @%%@QR:%out@%%@NL@%
  746.      Displays text to the standard output device (the screen).%@NL@%
  747. %@NL@%
  748. %@AB@%PAGE%@AE@% ««%@AI@%length%@AE@%»%@AB@%,%@AI@%width%@AE@%»%@CR:PAGE      @%%@QR:page@%%@NL@%
  749.      Sets line %@AI@%length%@AE@% and character %@AI@%width%@AE@% of the program listing. If no
  750.      arguments are given, generates a page break.%@NL@%
  751. %@NL@%
  752. %@AB@%PAGE +%@AE@%%@CR:PAGE +    @%%@QR:page +@%%@NL@%
  753.      Increments section-page numbering.%@NL@%
  754. %@NL@%
  755. %@AI@%label%@AE@% %@AB@%PROC%@AE@% «%@AB@%NEAR%@AE@%|%@AB@%FAR%@AE@%»%@QR:proc@%%@QR:near@%%@QR:far@%%@NL@%
  756. %@AI@%statements%@AE@%%@CR:PROC      @%%@NL@%
  757. %@AB@%RET %@AE@%«%@AI@%constant%@AE@%»%@QR:ret@%%@NL@%
  758. %@AI@%label%@AE@% %@AB@%ENDP%@AE@%%@QR:endp@%%@NL@%
  759.      Marks start and end of a procedure block called %@AI@%label%@AE@%. The statements
  760.      the block can be called with the %@AB@%CALL%@AE@% instruction.%@NL@%
  761. %@NL@%
  762. %@AB@%PUBLIC %@AI@%name%@AE@% «%@AB@%,%@AI@%name%@AE@%»...%@CR:PUBLIC    @%%@QR:public@%%@NL@%
  763.      Makes each variable, label, or absolute symbol specified as %@AI@%name%@AE@%
  764.      available to all other modules in the program.%@NL@%
  765. %@NL@%
  766. %@AB@%PURGE %@AI@%macroname%@AE@% «%@AB@%,%@AI@%macroname%@AE@%»...%@CR:PURGE     @%%@QR:purge@%%@NL@%
  767.      Deletes the specified macros from memory.%@NL@%
  768. %@NL@%
  769. %@AB@%.RADIX %@AI@%expression%@AE@%%@CR:.RADIX    @%%@QR:.radix@%%@QR:radix@%%@NL@%
  770.      Sets the input radix to the value of %@AI@%expression%@AE@%.%@NL@%
  771. %@NL@%
  772. %@AI@%recordname%@AE@% %@AB@%RECORD %@AI@%field%@AE@%«,%@AI@%field%@AE@%»...%@CR:RECORD    @%%@QR:record@%%@NL@%
  773.      Declares a record type consisting of the specified fields. Each field
  774.      has the following form:%@NL@%
  775. %@NL@%
  776.      %@AI@%fieldname%@AB@%:%@AI@%width%@AE@%«%@AB@%= %@AI@%expression%@AE@%»%@NL@%
  777. %@NL@%
  778.      The %@AI@%fieldname%@AE@% names the field, %@AI@%width%@AE@% specifies the number of bits, and
  779.      %@AI@%expression%@AE@% gives its initial value.%@NL@%
  780. %@CR:19        @%%@NL@%
  781. %@AB@%REPT %@AI@%expression%@AE@%%@CR:REPT      @%%@QR:rept@%%@NL@%
  782. %@AI@%statements%@AE@%%@NL@%
  783. %@AB@%ENDM%@AE@%%@QR:endm@%%@NL@%
  784.      Marks a block that is to be repeated %@AI@%expression%@AE@% times.%@NL@%
  785. %@NL@%
  786. %@AB@%.SALL%@AE@%%@CR:.SALL     @%%@QR:.sall@%%@QR:sall@%%@NL@%
  787.      Suppresses listing of macro expansions.%@NL@%
  788. %@NL@%
  789. %@AI@%name%@AE@% %@AB@%SEGMENT%@AE@% «%@AI@%align%@AE@%» «%@AI@%combine%@AE@%» «%@AI@%use%@AE@%» «%@AB@%'%@AI@%class%@AB@%'%@AE@%»%@CR:SEGMENT   @%%@QR:segment@%%@NL@%
  790. %@AI@%statements%@AE@%%@NL@%
  791. %@AI@%name%@AE@% %@AB@%ENDS%@AE@%%@QR:ends@%%@NL@%
  792.      Defines a program segment called %@AI@%name%@AE@% having segment attributes
  793.      %@AI@%align%@AE@%, %@AI@%combine%@AE@%, %@AI@%use%@AE@%, and %@AI@%class%@AE@%.%@NL@%
  794. %@NL@%
  795. %@AB@%.SEQ%@AE@%%@CR:.SEQ      @%%@QR:seq@%%@QR:.seq@%%@NL@%
  796.      Orders segments sequentially (the default order).%@NL@%
  797. %@NL@%
  798. %@AB@%.SFCOND%@AE@%%@CR:.SFCOND   @%%@QR:.sfcond@%%@QR:sfcond@%%@NL@%
  799.      Suppresses listing of conditional blocks whose condition evaluates
  800.      to false (0). This is the default.%@NL@%
  801. %@NL@%
  802. %@AB@%.STACK %@AE@%«%@AI@%size%@AE@%»%@CR:.STACK    @%%@QR:.stack@%%@QR:stack@%%@NL@%
  803.      When used with %@AB@%.MODEL%@AE@%, indicates the start of a stack segment (with
  804.      segment name %@AB@%STACK%@AE@%). The optional %@AI@%size%@AE@% specifies the number of bytes
  805.      for the stack (default 1024).%@NL@%
  806. %@NL@%
  807. %@AI@%name%@AE@% %@AB@%STRUC%@AE@%%@CR:STRUC     @%%@QR:struc@%%@NL@%
  808. %@AI@%fields%@AE@%%@NL@%
  809. %@AI@%name%@AB@% ENDS%@AE@%%@QR:ends@%%@NL@%
  810.      Declares a structure type having the specified %@AI@%fields%@AE@%. Each field must
  811.      be a valid data definition (using %@AB@%DB%@AE@%, %@AB@%DW%@AE@%, etc.).%@NL@%
  812. %@NL@%
  813. %@AB@%SUBTTL %@AI@%text%@AE@%%@CR:SUBTTL    @%%@QR:subttl@%%@NL@%
  814.      Defines the listing subtitle.%@NL@%
  815. %@NL@%
  816. %@AB@%.TFCOND%@AE@%%@CR:.TFCOND   @%%@QR:.tfcond@%%@QR:tfcond@%%@NL@%
  817.      Toggles listing of false conditional blocks.%@NL@%
  818. %@NL@%
  819. %@AB@%TITLE %@AI@%text%@AE@%%@CR:TITLE     @%%@QR:title@%%@NL@%
  820.      Defines the program listing title.%@NL@%
  821. %@NL@%
  822. %@AB@%.XALL%@AE@%%@CR:.XALL     @%%@QR:.xall@%%@QR:xall@%%@NL@%
  823.      Starts listing of macro expansion statements that generate code or
  824.      data. This is the default.%@NL@%
  825. %@NL@%
  826. %@AB@%.XCREF%@AE@% «%@AI@%name%@AE@%«,%@AI@%name%@AE@%»...»%@CR:.XCREF    @%%@QR:.xcref@%%@QR:xcref@%%@NL@%
  827.      Suppresses listing of symbols in the cross-reference listing file.
  828.      If %@AI@%names%@AE@% are specified, only the given symbols will be suppressed.%@NL@%
  829. %@NL@%
  830. %@AB@%.XLIST%@AE@%%@CR:.XLIST    @%%@QR:.xlist@%%@QR:xlist@%%@NL@%
  831.      Suppresses program listing.%@NL@%
  832. %@NL@%
  833. %@NL@%
  834. %@CR:20        @%%@NL@%
  835. %@2@%%@AB@%Operators%@CR:Op-Entries@%%@AE@%%@EH@%%@QR:operators@%%@NL@%
  836. ───────────────────────────────────────────────────────────────────────────%@NL@%
  837. %@NL@%
  838. %@AI@%expression1%@AE@% %@AB@%* %@AI@%expression2%@AE@%%@CR:*         @%%@QR:*@%%@NL@%
  839.      Returns %@AI@%expression1%@AE@% times %@AI@%expression2%@AE@%.%@NL@%
  840. %@NL@%
  841. %@AI@%expression1%@AE@% %@AB@%/ %@AI@%expression2%@AE@%%@CR:/         @%%@QR:/@%%@NL@%
  842.      Returns %@AI@%expression1%@AE@% divided by %@AI@%expression2%@AE@%.%@NL@%
  843. %@NL@%
  844. %@AI@%expression1%@AE@% %@AB@%+  %@AI@%expression2%@AE@%%@CR:+         @%%@QR:+@%%@NL@%
  845.      Returns %@AI@%expression1%@AE@% plus %@AI@%expression2%@AE@%.%@NL@%
  846. %@NL@%
  847. %@AI@%expression1%@AE@% %@AB@%- %@AI@%expression2%@AE@%%@CR:-         @%%@QR:-@%%@NL@%
  848.      Returns %@AI@%expression1%@AE@% minus %@AI@%expression2%@AE@%.%@NL@%
  849. %@NL@%
  850. %@AB@%-%@AI@%expression%@AE@%%@CR:-express  @%%@NL@%
  851.      Reverses the sign of %@AI@%expression%@AE@%.%@NL@%
  852. %@NL@%
  853. %@AI@%segment%@AB@%: %@AI@%expression%@AE@%%@CR::         @%%@NL@%
  854.      Overrides the default segment of %@AI@%expression%@AE@% with %@AI@%segment%@AE@%. The
  855.      %@AI@%segment%@AE@% may be a segment register, a group name, or a segment name.
  856.      The %@AI@%expression%@AE@% can be a constant, a memory expression, or a
  857.      %@AB@%SEG%@AE@% expression.%@NL@%
  858. %@NL@%
  859. %@AI@%variable%@AE@% %@AB@%. %@AI@%field%@AE@%%@CR:.         @%%@NL@%
  860.      Returns the offset of %@AI@%field%@AE@% plus the offset of %@AI@%variable%@AE@%.%@NL@%
  861. %@NL@%
  862. «%@AI@%expression1%@AE@%» [%@AI@%expression2%@AE@%]%@CR:[]        @%%@NL@%
  863.      Returns the offset of %@AI@%expression1%@AE@% plus the offset of %@AI@%expression2%@AE@%.%@NL@%
  864. %@NL@%
  865. %@AB@%<%@AI@%text%@AB@%>%@CR:<>        @%%@AE@%%@NL@%
  866.      Treats %@AI@%text%@AE@% in a macro argument as a single literal element.%@NL@%
  867. %@NL@%
  868. %@AB@%!%@AI@%character%@AE@%%@CR:!         @%%@QR:!@%%@NL@%
  869.      Treats %@AI@%character%@AE@% in a macro argument as a literal character rather
  870.      than as an operator or symbol.%@NL@%
  871. %@NL@%
  872. %@AB@%;%@AI@%text%@AE@%%@CR:;         @%%@QR:;@%%@NL@%
  873.      Treats %@AI@%text%@AE@% as a comment.%@NL@%
  874. %@NL@%
  875. %@AB@%;;%@AI@%text%@AE@%%@CR:;;        @%%@QR:;;@%%@NL@%
  876.      Treats %@AI@%text%@AE@% as a comment that will not be listed in expanded macros.%@NL@%
  877. %@NL@%
  878. %@AB@%%%@AI@%text%@AE@%%@CR:%         @%%@QR:%@%%@NL@%
  879.      Treats %@AI@%text%@AE@% in a macro argument as an expression.%@NL@%
  880. %@NL@%
  881. %@AB@%&%@AI@%parameter%@AE@%%@CR:&         @%%@QR:&@%%@NL@%
  882.      Replaces %@AI@%parameter%@AE@% with its corresponding argument value.%@NL@%
  883. %@NL@%
  884. %@AI@%expression1%@AE@% %@AB@%AND %@AI@%expression2%@AE@%%@CR:ANDop     @%%@QR:and@%%@NL@%
  885.      Returns the result of a bitwise Boolean AND done on %@AI@%expression1%@AE@% and
  886.      %@AI@%expression2%@AE@%.%@NL@%
  887. %@NL@%
  888. %@AI@%count%@AE@% %@AB@%DUP%@AE@% (%@AI@%initialvalue%@AE@%«,%@AI@%initialvalue%@AE@%»...)%@CR:DUP       @%%@QR:dup@%%@NL@%
  889.      Specifies %@AI@%count%@AE@% number of declarations of %@AI@%initialvalue%@AE@%.%@NL@%
  890. %@CR:21        @%%@NL@%
  891. %@AI@%expression1%@AE@% %@AB@%EQ %@AI@%expression2%@AE@%%@CR:EQ        @%%@QR:eq@%%@NL@%
  892.      Returns true (-1) if %@AI@%expression1%@AE@% equals %@AI@%expression2%@AE@%, or returns false
  893.      (0) if it does not.%@NL@%
  894. %@NL@%
  895. %@AI@%expression1%@AE@% %@AB@%GE %@AI@%expression2%@AE@%%@CR:GE        @%%@QR:ge@%%@NL@%
  896.      Returns true (-1) if %@AI@%expression1%@AE@% is greater than or equal to
  897.      %@AI@%expression2%@AE@%, or returns false (0) if it is not.%@NL@%
  898. %@NL@%
  899. %@AI@%expression1%@AE@% %@AB@%GT %@AI@%expression2%@AE@%%@CR:GT        @%%@QR:gt@%%@NL@%
  900.      Returns true (-1) if %@AI@%expression1%@AE@% is greater than %@AI@%expression2%@AE@%, or
  901.      returns false (0) if it is not.%@NL@%
  902. %@NL@%
  903. %@AB@%HIGH %@AI@%expression%@AE@%%@CR:HIGH      @%%@QR:high@%%@NL@%
  904.      Returns the high byte of %@AI@%expression%@AE@%.%@NL@%
  905. %@NL@%
  906. %@AI@%expression1%@AE@% %@AB@%LE %@AI@%expression2%@AE@%%@CR:LE        @%%@QR:le@%%@NL@%
  907.      Returns true (-1) if %@AI@%expression1%@AE@% is less than or equal to %@AI@%expression2%@AE@%,
  908.      or returns false (0) if it is not.%@NL@%
  909. %@NL@%
  910. %@AB@%LENGTH %@AI@%variable%@AE@%%@CR:LENGTH    @%%@QR:length@%%@NL@%
  911.      Returns the number of data objects in %@AI@%variable%@AE@% if %@AI@%variable%@AE@% was defined
  912.      with the %@AB@%DUP%@AE@% operator.%@NL@%
  913. %@NL@%
  914. %@AB@%LOW %@AI@%expression%@AE@%%@CR:LOW       @%%@QR:low@%%@NL@%
  915.      Returns the low byte of %@AI@%expression%@AE@%.%@NL@%
  916. %@NL@%
  917. %@AI@%expression1%@AE@% %@AB@%LT %@AI@%expression2%@AE@%%@CR:LT        @%%@QR:lt@%%@NL@%
  918.      Returns true (-1) if %@AI@%expression1%@AE@% is less than %@AI@%expression2%@AE@%, or returns
  919.      false (0) if it is not.%@NL@%
  920. %@NL@%
  921. %@AB@%MASK {%@AI@%recordfieldname%@AB@%|%@AI@%record%@AB@%}%@AE@%%@CR:MASK      @%%@QR:mask@%%@NL@%
  922.      Returns a bit mask in which the bits for %@AI@%recordfieldname%@AE@% or %@AI@%record%@AE@% are
  923.      set and all other bits are cleared.%@NL@%
  924. %@NL@%
  925. %@AI@%expression1%@AE@% %@AB@%MOD %@AI@%expression2%@AE@%%@CR:MOD       @%%@QR:mod@%%@NL@%
  926.      Returns the remainder of dividing %@AI@%expression1%@AE@% by %@AI@%expression2%@AE@%.%@NL@%
  927. %@NL@%
  928. %@AI@%expression1%@AE@% %@AB@%NE %@AI@%expression2%@AE@%%@CR:NE        @%%@QR:ne@%%@NL@%
  929.      Returns true (-1) if %@AI@%expression1%@AE@% does not equal %@AI@%expression2%@AE@%,
  930.      or returns false (0) if it does.%@NL@%
  931. %@NL@%
  932. %@AB@%NOT %@AI@%expression%@AE@%%@CR:NOTop     @%%@QR:not@%%@NL@%
  933.      Returns %@AI@%expression%@AE@% with all bits reversed.%@NL@%
  934. %@NL@%
  935. %@AB@%OFFSET %@AI@%expression%@AE@%%@CR:OFFSET    @%%@QR:offset@%%@NL@%
  936.      Returns the offset of %@AI@%expression%@AE@%.%@NL@%
  937. %@NL@%
  938. %@AI@%expression1%@AE@% %@AB@%OR %@AI@%expression2%@AE@%%@CR:ORop      @%%@QR:or@%%@NL@%
  939.      Returns the result of a bitwise Boolean OR done on %@AI@%expression1%@AE@% and
  940.      %@AI@%expression2%@AE@%.%@NL@%
  941. %@NL@%
  942. %@AI@%type%@AE@% %@AB@%PTR %@AI@%expression%@AE@%%@CR:PTR       @%%@QR:ptr@%%@NL@%
  943.      Forces the %@AI@%expression%@AE@% to be treated as having the specified %@AI@%type%@AE@%.%@NL@%
  944. %@NL@%
  945. %@AB@%SEG %@AI@%expression%@AE@%%@CR:SEG       @%%@QR:seg@%%@NL@%
  946.      Returns the segment of %@AI@%expression%@AE@%.%@NL@%
  947. %@NL@%
  948. %@AI@%expression%@AE@% %@AB@%SHL %@AI@%count%@AE@%%@CR:SHLop     @%%@QR:shl@%%@NL@%
  949.      Returns the result of shifting the bits of %@AI@%expression%@AE@% left %@AI@%count%@AE@%
  950.      number of bits.%@NL@%
  951. %@CR:22        @%%@NL@%
  952. %@AB@%SHORT %@AI@%label%@AE@%%@CR:SHORT     @%%@QR:short@%%@NL@%
  953.      Sets the type of %@AI@%label%@AE@% to short (having a distance less than 128 bytes
  954.      from the start of the next instruction).%@NL@%
  955. %@NL@%
  956. %@AI@%expression%@AE@% %@AB@%SHR %@AI@%count%@AE@%%@CR:SHRop     @%%@QR:shr@%%@NL@%
  957.      Returns the result of shifting the bits of %@AI@%expression%@AE@% right %@AI@%count%@AE@%
  958.      number of bits.%@NL@%
  959. %@NL@%
  960. %@AB@%SIZE %@AI@%variable%@AE@%%@CR:SIZE      @%%@QR:size@%%@NL@%
  961.      Returns the number of bytes allocated for %@AI@%variable%@AE@% if %@AI@%variable%@AE@% was
  962.      defined with the %@AB@%DUP%@AE@% operator.%@NL@%
  963. %@NL@%
  964. %@AB@%THIS %@AI@%type%@AE@%%@CR:THIS      @%%@QR:this@%%@NL@%
  965.      Returns an operand of specified %@AI@%type%@AE@% whose offset and segment values
  966.      are equal to the current location-counter value.%@NL@%
  967. %@NL@%
  968. %@AB@%TYPE %@AI@%expression%@AE@%%@CR:TYPE      @%%@QR:type@%%@NL@%
  969.      Returns the type of %@AI@%expression%@AE@%.%@NL@%
  970. %@NL@%
  971. %@AB@%.TYPE %@AI@%expression%@AE@%%@CR:.TYPE     @%%@QR:.type@%%@NL@%
  972.      Returns a byte defining the mode and scope of %@AI@%expression%@AE@%.%@NL@%
  973. %@NL@%
  974. %@AB@%WIDTH {%@AI@%recordfieldname%@AB@%|%@AI@%record%@AB@%}%@AE@%%@CR:WIDTH     @%%@QR:width@%%@NL@%
  975.      Returns the width in bits of the current %@AI@%recordfieldname%@AE@% or %@AI@%record%@AE@%.%@NL@%
  976. %@NL@%
  977. %@AI@%expression1%@AE@% %@AB@%XOR %@AI@%expression2%@AE@%%@CR:XORop     @%%@QR:xor@%%@NL@%
  978.      Returns the result of a bitwise Boolean XOR done on %@AI@%expression1%@AE@% and
  979.      %@AI@%expression2%@AE@%.%@NL@%
  980. %@NL@%
  981. %@NL@%
  982. %@CR:23a       @%%@NL@%
  983. %@1@%%@AB@%Processor%@CR:Processor @%%@AE@%%@EH@%%@QR:processor@%%@QR:microprocessor@%%@QR:cpu@%%@NL@%
  984. %@NL@%
  985. ───────────────────────────────────────────────────────────────────────────%@NL@%
  986. %@NL@%
  987. Interpreting Processor Instructions%@BO:     13c39@%%@NL@%
  988.      Flags%@BO:     14bdf@%%@NL@%
  989.      Syntax%@BO:     14ef6@%%@NL@%
  990.      Examples%@BO:     153bf@%%@NL@%
  991.      Clock Speeds%@BO:     156c3@%%@NL@%
  992.           Timings on the 8088 and 8086%@BO:     15f95@%%@NL@%
  993.           Timings on the 80286 and 80386%@BO:     168e4@%%@NL@%
  994.      Interpreting Encodings%@BO:     16c99@%%@NL@%
  995.      Interpreting 80386 Encoding Extensions%@BO:     188fe@%%@NL@%
  996.           80286 Encoding%@BO:     18db0@%%@NL@%
  997.           80386 Encoding%@BO:     18f4d@%%@NL@%
  998.           Address-Size Prefix%@BO:     191ff@%%@NL@%
  999.           Operand-Size Prefix%@BO:     1959d@%%@NL@%
  1000.           Encoding Differences for 32-bit Operations%@BO:     19923@%%@NL@%
  1001.           Scaled Index Base Byte%@BO:     1a29e@%%@NL@%
  1002. Instructions%@BO:     1ca88@%%@NL@%
  1003. %@NL@%
  1004. %@NL@%
  1005. %@CR:23b       @%%@NL@%
  1006. %@AB@%Topical Cross-Reference%@AE@%%@NL@%
  1007. %@NL@%
  1008. %@AU@%Data%@AE@%                              %@AU@%String%@AE@%%@NL@%
  1009. %@AU@%Transfer%@AB@%                          MOVS%@BO:     3d718@%%@AE@%%@NL@%
  1010. %@AB@%MOV%@BO:     3c5e5@%                              LODS%@BO:     388a6@%%@AE@%%@NL@%
  1011. %@AB@%MOVS%@BO:     3d718@%                             %@AB@%STOS%@BO:     51f69@%%@AE@%%@NL@%
  1012. %@AB@%MOVSX%@BO:     3e019@%%@AE@% (80386 only)               %@AB@%SCAS%@BO:     4cd48@%%@AE@%%@NL@%
  1013. %@AB@%MOVZX%@BO:     3e717@%%@AE@% (80386 only)               %@AB@%CMPS%@BO:     27b7d@%%@AE@%%@NL@%
  1014. %@AB@%XCHG%@BO:     559a0@%                             INS%@BO:     2f6ca@%%@AE@% (80186/286/386 only)%@NL@%
  1015. %@AB@%LODS%@BO:     388a6@%                             OUTS%@BO:     41f5c@%%@AE@% (80186/286/386 only)%@NL@%
  1016. %@AB@%STOS%@BO:     51f69@%                             REP%@BO:     472f1@%%@AE@%%@NL@%
  1017. %@AB@%LEA%@BO:     36690@%                              REPE/REPZ%@BO:     48085@%%@AE@%%@NL@%
  1018. %@AB@%LDS/LES%@BO:     35607@%                          REPNE/REPNZ%@BO:     48085@%%@AE@%%@NL@%
  1019. %@AB@%LFS/LGS/LSS%@BO:     35607@%%@AE@% (80386 only)%@NL@%
  1020. %@AB@%XLAT/XLATB%@BO:     5620e@%                       %@AU@%Arithmetic%@AE@%%@NL@%
  1021.                                   %@AB@%ADD%@BO:     1edb3@%%@AE@%%@NL@%
  1022. %@AU@%Stack%@AB@%                             ADC%@BO:     1e04f@%%@AE@%%@NL@%
  1023. %@AB@%PUSH%@BO:     43f56@%                             INC%@BO:     2eea4@%%@AE@%%@NL@%
  1024. %@AB@%PUSHF%@BO:     4531f@%                            SUB%@BO:     52ebd@%%@AE@%%@NL@%
  1025. %@AB@%PUSHA%@BO:     44d9b@%%@AE@% (80186/286/386 only)       %@AB@%SBB%@BO:     4bf6b@%%@AE@%%@NL@%
  1026. %@AB@%POP%@BO:     42931@%                              DEC%@BO:     29dad@%%@AE@%%@NL@%
  1027. %@AB@%POPF%@BO:     43ac2@%                             NEG%@BO:     3f85a@%%@AE@%%@NL@%
  1028. %@AB@%POPA%@BO:     43511@%%@AE@% (80186/286/386 only)        %@AB@%IMUL%@BO:     2cc82@%%@AE@%%@NL@%
  1029.                                   %@AB@%MUL%@BO:     3ee14@%%@AE@%%@NL@%
  1030. %@AU@%Input/Output%@AB@%                      DIV%@BO:     2a5d8@%%@AE@%%@NL@%
  1031. %@AB@%IN%@BO:     2e656@%                               IDIV%@BO:     2c44e@%%@AE@%%@NL@%
  1032. %@AB@%INS%@BO:     2f6ca@%%@AE@% (80186/286/386 only)%@NL@%
  1033. %@AB@%OUT%@BO:     416fd@%                              %@AU@%Logical%@AE@%%@NL@%
  1034. %@AB@%OUTS%@BO:     41f5c@%%@AE@% (80186/286/386 only)        %@AB@%AND%@BO:     1fa53@%%@AE@%%@NL@%
  1035.                                   %@AB@%OR%@BO:     40943@%%@AE@%%@NL@%
  1036. %@AU@%Type%@AB@%                              XOR%@BO:     568ac@%%@AE@%%@NL@%
  1037. %@AU@%Conversion%@AB@%                        NOT%@BO:     40371@%%@AE@%%@NL@%
  1038. %@AB@%CBW%@BO:     24c97@%%@AE@%%@NL@%
  1039. %@AB@%CWD%@BO:     286b4@%                              %@AU@%Bit Shift%@AE@%%@NL@%
  1040. %@AB@%CWDE%@BO:     28c67@%%@AE@% (80386 only)                %@AB@%ROL%@BO:     49de0@%%@AE@%%@NL@%
  1041. %@AB@%CDQ%@BO:     25202@%%@AE@% (80386 only)                 %@AB@%ROR%@BO:     49de0@%%@AE@%%@NL@%
  1042.                                   %@AB@%RCL%@BO:     457a0@%%@AE@%%@NL@%
  1043. %@AU@%Flag%@AB@%                              RCR%@BO:     457a0@%%@AE@%%@NL@%
  1044. %@AB@%CLC%@BO:     257d0@%                              SHL/SAL%@BO:     4a310@%%@AE@%%@NL@%
  1045. %@AB@%CLD%@BO:     25b77@%                              SHR%@BO:     4a310@%%@AE@%%@NL@%
  1046. %@AB@%CLI%@BO:     25fc9@%                              SAR%@BO:     4a310@%%@AE@%%@NL@%
  1047. %@AB@%CMC%@BO:     26a2e@%                              SHLD%@BO:     4f63d@%%@AE@% (80386 only)%@NL@%
  1048. %@AB@%CLTS%@BO:     264d5@%%@AE@% (80186/286/386 only)        %@AB@%SHRD%@BO:     4f63d@%%@AE@% (80386 only)%@NL@%
  1049. %@AB@%STC%@BO:     512f5@%                              BSF%@BO:     217f3@%%@AE@% (80386 only)%@NL@%
  1050. %@AB@%STD%@BO:     516a0@%                              BSR%@BO:     217f3@%%@AE@% (80386 only)%@NL@%
  1051. %@AB@%STI%@BO:     51aa7@%%@AE@%%@NL@%
  1052. %@AB@%POPF%@BO:     43ac2@%%@AE@%%@NL@%
  1053. %@AB@%PUSHF%@BO:     4531f@%%@AE@%%@NL@%
  1054. %@AB@%LAHF%@BO:     3494a@%%@AE@%%@NL@%
  1055. %@AB@%SAHF%@BO:     49ea6@%%@AE@%%@NL@%
  1056. %@NL@%
  1057. %@AU@%Compare%@AE@%                           %@AU@%Conditional Set%@AE@%%@NL@%
  1058. %@AB@%CMP%@BO:     26dfe@%                              SETB/SETNAE%@BO:     4d829@%%@AE@% (80386 only)%@NL@%
  1059. %@AB@%CMPS%@BO:     27b7d@%                             SETAE/SETNB%@BO:     4d829@%%@AE@% (80286/386 only)%@NL@%
  1060. %@AB@%TEST%@BO:     53bc1@%                             SETBE/SETNA%@BO:     4d829@%%@AE@% (80386 only)%@NL@%
  1061. %@AB@%BT%@BO:     22312@%%@AE@% (80386 only)                  %@AB@%SETA/SETNBE%@BO:     4d829@%%@AE@% (80386 only)%@NL@%
  1062. %@AB@%BTC%@BO:     22312@%%@AE@% (80386 only)                 %@AB@%SETE/SETZ%@BO:     4d829@%%@AE@% (80386 only)%@NL@%
  1063. %@AB@%BTR%@BO:     22312@%%@AE@% (80386 only)                 %@AB@%SETNE/SETNZ%@BO:     4d829@%%@AE@% (80386 only)%@NL@%
  1064. %@AB@%BTS%@BO:     22312@%%@AE@% (80386 only)                 %@AB@%SETL/SETNGE%@BO:     4d829@%%@AE@% (80386 only)%@NL@%
  1065.                                   %@AB@%SETGE/SETNL%@BO:     4d829@%%@AE@% (80386 only)%@NL@%
  1066. %@AU@%Unconditional%@AE@%                     %@AB@%SETLE/SETNG%@BO:     4d829@%%@AE@% (80386 only)%@NL@%
  1067. %@AU@%Transfer%@AE@%                          %@AB@%SETG/SETNLE%@BO:     4d829@%%@AE@% (80386 only)%@NL@%
  1068. %@AB@%CALL%@BO:     23b2f@%                             SETS%@BO:     4d829@%%@AE@% (80386 only)%@NL@%
  1069. %@AB@%INT%@BO:     30118@%                              SETNS%@BO:     4d829@%%@AE@% (80386 only)%@NL@%
  1070. %@AB@%IRET%@BO:     313e0@%                             SETC%@BO:     4d829@%%@AE@% (80386 only)%@NL@%
  1071. %@AB@%RET%@BO:     48e63@%                              SETNC%@BO:     4d829@%%@AE@% (80386 only)%@NL@%
  1072. %@AB@%RETN/RETF%@BO:     48e63@%                        SETO%@BO:     4d829@%%@AE@% (80386 only)%@NL@%
  1073. %@AB@%JMP%@BO:     33624@%                              SETNO%@BO:     4d829@%%@AE@% (80386 only)%@NL@%
  1074. %@AB@%ENTER%@BO:     2ae06@%%@AE@% (80186/286/386 only)       %@AB@%SETNP/SETPE%@BO:     4d829@%%@AE@% (80386 only)%@NL@%
  1075. %@AB@%LEAVE%@BO:     36b34@%%@AE@% (80186/286/386 only)      %@AB@% SETN/SETPO%@BO:     4d829@%%@AE@% (80386 only)%@NL@%
  1076. %@NL@%
  1077. %@AU@%Loop%@AE@%                              %@AU@%BCD Conversion%@AE@%%@NL@%
  1078. %@AB@%LOOP%@BO:     39178@%                             AAA%@BO:     1cb3b@%%@AE@%%@NL@%
  1079. %@AB@%LOOPE/LOOPZ%@BO:     396bf@%                      AAS%@BO:     1db3f@%%@AE@%%@NL@%
  1080. %@AB@%LOOPNE/LOOPNZ%@BO:     396bf@%                    AAM%@BO:     1d540@%%@AE@%%@NL@%
  1081. %@AB@%JCXZ/JECXZ%@BO:     330ff@%                       AAD%@BO:     1d023@%%@AE@%%@NL@%
  1082.                                   %@AB@%DAA%@BO:     2925b@%%@AE@%%@NL@%
  1083. %@AU@%Conditional%@AB@%                       DAS%@BO:     29808@%%@AE@%%@NL@%
  1084. %@AU@%Transfer%@AE@%%@NL@%
  1085. %@AB@%JB/JNAE%@BO:     31ca0@%                          %@AU@%Processor%@AE@%%@NL@%
  1086. %@AB@%JAE/JNB%@BO:     31ca0@%                          %@AU@%Control%@AE@%%@NL@%
  1087. %@AB@%JBE/JNA%@BO:     31ca0@%                          NOP%@BO:     3ff55@%%@AE@%%@NL@%
  1088. %@AB@%JA/JNBE%@BO:     31ca0@%                          ESC%@BO:     2b762@%%@AE@%%@NL@%
  1089. %@AB@%JE/JZ%@BO:     31ca0@%                            WAIT%@BO:     554f2@%%@AE@%%@NL@%
  1090. %@AB@%JNE/JNZ%@BO:     31ca0@%                          LOCK%@BO:     383c2@%%@AE@%%@NL@%
  1091. %@AB@%JL/JNGE%@BO:     31ca0@%                          HLT%@BO:     2c06c@%%@AE@%%@NL@%
  1092. %@AB@%JGE/JNL%@BO:     31ca0@%%@AE@%%@NL@%
  1093. %@AB@%JLE/JNG%@BO:     31ca0@%                          %@AU@%Process Control%@AE@%%@NL@%
  1094. %@AB@%JG/JNLE%@BO:     31ca0@%                          ARPL%@BO:     207ba@%%@AE@% (80286/386 only)%@NL@%
  1095. %@AB@%JS%@BO:     31ca0@%                               CLTS%@BO:     264d5@%%@AE@% (80286/386 only)%@NL@%
  1096. %@AB@%JNS%@BO:     31ca0@%                              LAR%@BO:     34d95@%%@AE@% (80286/386 only)%@NL@%
  1097. %@AB@%JC%@BO:     31ca0@%                               LGDT/LIDT/LLDT%@BO:     37116@%%@AE@% (80286/386 only)%@NL@%
  1098. %@AB@%JNC%@BO:     31ca0@%                              LMSW%@BO:     37d20@%%@AE@% (80286/386 only)%@NL@%
  1099. %@AB@%JO%@BO:     31ca0@%                               LSL%@BO:     39f8a@%%@AE@% (80286/386 only)%@NL@%
  1100. %@AB@%JNO%@BO:     31ca0@%                              LTR%@BO:     3a9b2@%%@AE@% (80286/386 only)%@NL@%
  1101. %@AB@%JP/JPE%@BO:     31ca0@%                           SGDT/SIDT/SLDT%@BO:     4e96a@%%@AE@% (80286/386 only)%@NL@%
  1102. %@AB@%JNP/JPO%@BO:     31ca0@%                          SMSW%@BO:     50c41@%%@AE@% (80286/386 only)%@NL@%
  1103. %@AB@%JCXZ/JECZ%@BO:     330ff@%                        STR%@BO:     5282d@%%@AE@% (80286/386 only)%@NL@%
  1104. %@AB@%INTO%@BO:     30d65@%                             VERR%@BO:     549e4@%%@AE@% (80286/386 only)%@NL@%
  1105. %@AB@%BOUND%@BO:     20f8f@%%@AE@% (80186/286/386 only)      %@AB@% VERW%@BO:     549e4@%%@AE@% (80286/386 only)%@NL@%
  1106.                                   %@AB@%MOV %@AI@%special%@AE@%%@BO:     3c5e5@% (80386 only)%@NL@%
  1107. %@NL@%
  1108. %@NL@%
  1109. %@CR:23c       @%%@NL@%
  1110. %@2@%%@AB@%Interpreting Processor Instructions%@CR:Proc1     @%%@AE@%%@EH@%%@QR:processor instructions@%%@QR:instructions@%%@NL@%
  1111. ───────────────────────────────────────────────────────────────────────────%@NL@%
  1112. %@NL@%
  1113. %@4@%This section provides an alphabetical reference to the instructions for%@EH@%
  1114. the 8086, 8088, 80286, and 80386 processors. A key to each element of
  1115. the reference is given in Figure 1%@BO:     14b94@%. %@NL@%
  1116. %@NL@%
  1117. %@NL@%
  1118. ┌──────────────────────────────────────────────────────────────────────────┐%@NL@%
  1119. │                                                                          │%@NL@%
  1120. │                                                                          │%@NL@%
  1121. │%@AB@% BSF/BSR%@AE@% ──────────────────────────────────  %@AS@%Mnemonic%@AE@%                    │%@NL@%
  1122. │%@AB@% Bit Scan%@AE@% ─────────────────────────────────  %@AS@%Name%@AE@%                        │%@NL@%
  1123. │%@AB@% 80386 Only%@AE@% ───────────────────────────────  %@AS@%Restriction (Optional)%@AE@%      │%@NL@%
  1124. │ ┌───┬───┬───┬───┬───┬───┬───┬───┬───┐                                    │%@NL@%
  1125. │ │ O │ D │ I │ T │ S │ Z │ A │ P │ C │▒                                   │%@NL@%
  1126. │ ├───┼───┼───┼───┼───┼───┼───┼───┼───┤▒%@AS@%Flags%@AE@%                             │%@NL@%
  1127. │ │   │   │   │   │   │ ± │   │   │   │▒                                   │%@NL@%
  1128. │ └───┴───┴───┴───┴───┴───┴───┴───┴───┘                                    │%@NL@%
  1129. │                                                                          │%@NL@%
  1130. │ Scans an operand to find the first set bit. If a set bit is ▒            │%@NL@%
  1131. │ found, the zero flag is set and the destination operand is  ▒            │%@NL@%
  1132. │ loaded with the bit index of the first set bit encountered. ▒%@AS@%Description%@AE@%│%@NL@%
  1133. │ If no set bit is found, the zero flag is cleared. %@AB@%BSF%@AE@% (Bit  ▒            │%@NL@%
  1134. │ Scan Forward) scans from bit 0 to the most significant bit. ▒            │%@NL@%
  1135. │%@AB@% BSR%@AE@% (Bit Scan Reverse) scans from the most significant      ▒            │%@NL@%
  1136. │ bit of an operand to bit 0.                                 ▒            │%@NL@%
  1137. │                                                %@AS@%Encoding%@AE@%  ─────────┐      │%@NL@%
  1138. │ ───────────────────────────────────────────────────────────────── │      │%@NL@%
  1139. │ ┌───────────┐ ┌───────────┐ ┌─────────────┐                    ▒  │      │%@NL@%
  1140. │ │ 00001111  │ │ 10111100%@AI@%d%@AE@% │ │ %@AI@%mod,reg,r/m%@AE@% │  %@AI@%disp%@AE@% %@AI@%(0,%@AE@% %@AI@%2,%@AE@% %@AI@%or%@AE@% %@AI@%4)%@AE@% ▒─┘      │%@NL@%
  1141. │ └───────────┘ └───────────┘ └─────────────┘                    ▒         │%@NL@%
  1142. │ ──────────────────┬───────────────────────┬───────────────────────       │%@NL@%
  1143. │%@AB@% BSF  %@AI@%reg,reg%@AE@%      │ bsf   cx,bx           │ 88/86     ─                  │%@NL@%
  1144. │%@AB@% BSR  %@AI@%reg,reg%@AE@%      │                       │   286     ─                  │%@NL@%
  1145. │                   │                       │   386     10+3n              │%@NL@%
  1146. │ ──────────────────┼───────────────────────┼───────────────────────       │%@NL@%
  1147. │%@AB@% BSF  %@AI@%reg,mem%@AE@%      │ bsf   ecx,bitmask     │ 88/86     ─                  │%@NL@%
  1148. │%@AB@% BSR  %@AI@%reg,mem%@AE@%      │                       │   286     ─                  │%@NL@%
  1149. │                   │                       │   386     10+3n              │%@NL@%
  1150. │ ──────────────────┴───────────────────────┴───────────────────────       │%@NL@%
  1151. │ ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒ ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒ ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒       │%@NL@%
  1152. │         │                    │                        │               │%@NL@%
  1153. │       %@AS@%Syntax%@AE@%              %@AS@%Examples%@AE@%               %@AS@%Clock Speeds%@AE@%            │%@NL@%
  1154. │                                                                          │%@NL@%
  1155. └──────────────────────────────────────────────────────────────────────────┘%@NL@%
  1156. %@NL@%
  1157. %@AB@%Figure 1%@CR:f1        @%  Instruction Key%@AE@%%@NL@%
  1158. %@NL@%
  1159. %@NL@%
  1160. %@3@%%@AB@%Flags%@CR:Proc1.1   @%%@AE@%%@EH@%%@QR:flags@%%@QR:processor flags@%%@QR:flag@%%@NL@%
  1161. %@NL@%
  1162. %@4@%The first row of the display has a one-character abbreviation for the%@EH@%
  1163. flag name. Only the flags common to all processors are shown.%@NL@%
  1164. %@NL@%
  1165. O  Overflow         T  Trap         A  Auxiliary carry%@NL@%
  1166. D  Direction        S  Sign         P  Parity%@NL@%
  1167. I  Interrupt        Z  Zero         C  Carry%@NL@%
  1168. %@NL@%
  1169. %@4@%The second line has codes indicating how the flag can be affected.%@EH@%%@NL@%
  1170. %@NL@%
  1171. 1        Sets the flag%@NL@%
  1172. 0        Clears the flag%@NL@%
  1173. ?        May change the flag, but the value is not predictable%@NL@%
  1174. blank    No effect on the flag%@NL@%
  1175. ±        Modifies according to the rules associated with the flag%@NL@%
  1176. %@NL@%
  1177. %@CR:24        @%%@NL@%
  1178. %@3@%%@AB@%Syntax%@CR:Proc1.2   @%%@AE@%%@EH@%%@QR:processor syntax@%%@NL@%
  1179. %@NL@%
  1180. %@4@%Each encoding variation may have different syntaxes corresponding to%@EH@%
  1181. different addressing modes. The following abbreviations are used:%@NL@%
  1182. %@NL@%
  1183. %@AI@%reg%@AE@%       A general-purpose register of any size%@NL@%
  1184. %@NL@%
  1185. %@AI@%segreg%@AE@%    One of the segment registers: %@AB@%DS%@AE@%, %@AB@%ES%@AE@%, %@AB@%SS%@AE@%, or %@AB@%CS%@AE@% (also %@AB@%FS%@AE@% or %@AB@%GS%@AE@% 
  1186.           on the 80386)%@NL@%
  1187. %@NL@%
  1188. %@AI@%accum%@AE@%     An accumulator register of any size: %@AB@%AL%@AE@% or %@AB@%AX%@AE@% (also %@AB@%EAX%@AE@% on the 
  1189.           80386)%@NL@%
  1190. %@NL@%
  1191. %@AI@%mem%@AE@%       A direct or indirect memory operand of any size%@NL@%
  1192. %@NL@%
  1193. %@AI@%label%@AE@%     A labeled memory location in the code segment%@NL@%
  1194. %@NL@%
  1195. %@AI@%src%@AE@%,%@AI@%dest%@AE@%  A source or destination memory operand used in a string
  1196.           operation%@NL@%
  1197. %@NL@%
  1198. %@AI@%immed%@AE@%     A constant operand%@NL@%
  1199. %@NL@%
  1200. %@4@%In some cases abbreviations have numeric suffixes to specify that the%@EH@%
  1201. operand must be a particular size. For example, %@AI@%reg16%@AE@% means that only
  1202. A 16-bit (word) register is accepted.%@NL@%
  1203. %@NL@%
  1204. %@NL@%
  1205. %@3@%%@AB@%Examples%@CR:Proc1.3   @%%@AE@%%@EH@%%@NL@%
  1206. %@NL@%
  1207. %@4@%One or more examples are shown for each syntax. The examples are%@EH@%
  1208. randomly chosen, and no significance should be attached to their order
  1209. or placement. They are valid examples of the associated syntax, but
  1210. there is no attempt to illustrate all possible operand combinations or
  1211. to show context. Their position is not related to the clock speeds in
  1212. the right column.%@NL@%
  1213. %@NL@%
  1214. %@4@%To avoid confusion by programmers who do not have an 80386 processor,%@EH@%
  1215. examples do not use 32-bit registers unless the instruction is available
  1216. only on the 80386. However, 80386 programmers can substitute 32-bit
  1217. registers unless the description specifically states otherwise.%@NL@%
  1218. %@NL@%
  1219. %@CR:25        @%%@NL@%
  1220. %@3@%%@AB@%Clock Speeds%@CR:Proc1.4   @%%@AE@%%@EH@%%@QR:clock speeds@%%@QR:clock speed@%%@QR:processor clock speeds@%%@QR:processor clock@%%@QR:processor clock speed@%%@QR:clock@%%@NL@%
  1221. %@NL@%
  1222. %@4@%Column 3 shows the clock speeds for each processor. Sometimes an%@EH@%
  1223. instruction may have more than one clock speed. Multiple speeds are
  1224. separated by commas. If several speeds are part of an expression, they
  1225. will be enclosed in parentheses. The following abbreviations are used
  1226. to specify variations: %@NL@%
  1227. %@NL@%
  1228. EA        %@AU@%Effective address.%@AE@% This applies only to the 8088 and 8086
  1229.           processors, as described in the next section.%@NL@%
  1230. %@NL@%
  1231. b,w,d     %@AU@%Byte, word, or doubleword operands.%@AE@%%@NL@%
  1232. %@NL@%
  1233. pm        %@AU@%Protected mode.%@AE@%%@NL@%
  1234. %@NL@%
  1235. n         %@AU@%Iterations.%@AE@% Repeated instructions may have a base number of
  1236.           clocks plus a number of clocks for each iteration. For
  1237.           example, 8+4n means eight clocks plus four clocks for each
  1238.           iteration.%@NL@%
  1239. %@NL@%
  1240. noj       %@AU@%No jump.%@AE@% For conditional jump instructions, noj indicates the
  1241.           speed if the condition is false and the jump is not taken.%@NL@%
  1242. %@NL@%
  1243. m         %@AU@%Next instruction components.%@AE@% Some control transfer
  1244.           instructions take different times depending on the length of
  1245.           the next instruction executed. On the 8088 and 8086, m is
  1246.           never a factor. On the 80286, m is the number of bytes in the
  1247.           instruction. On the 80386, m is the number of components. Each
  1248.           byte of encoding is a component and the displacement and data
  1249.           are separate components.%@NL@%
  1250. %@NL@%
  1251. W88,88    %@AU@%8088 exceptions.%@AE@% See "Timings on the 8088 and 8086%@BO:     15f95@%."%@NL@%
  1252. %@NL@%
  1253. %@4@%Clocks can be converted to nanoseconds by dividing one microsecond by%@EH@%
  1254. the number of megahertz (MHz) at which the processor is running. For
  1255. example, on a processor running at 8 MHz, one clock takes 125
  1256. nanoseconds (1000 MHz per nanosecond / 8 MHz).%@NL@%
  1257. %@NL@%
  1258. %@4@%The clock counts are for best-case timings. Actual timings vary%@EH@%
  1259. depending wait states, alignment of the instruction, the status of the
  1260. prefetch queue, and other factors.%@NL@%
  1261. %@NL@%
  1262. %@NL@%
  1263. %@3@%%@AB@%Timings on the 8088 and 8086%@CR:Proc1.4.1 @%%@AE@%%@EH@%%@QR:8088 timing@%%@QR:8086 timing@%%@QR:timing@%%@QR:processor timing@%%@NL@%
  1264. %@NL@%
  1265. %@4@%Because of its 8-bit data bus, the 8088 always requires two fetches to%@EH@%
  1266. get a 16-bit operand. Instructions that work on 16-bit memory operands
  1267. therefore take longer on the 8088 than on the 8086. Separate 8088
  1268. timings are shown in parentheses following the main timing. For example,
  1269. 9 (W88=13) means that the 8086 with any operands or the 8088 with byte
  1270. operands take 9 clocks, but the 8088 with word operands takes 13 clocks.
  1271. Similarly, 16 (88=24) means that the 8086 takes 16 clocks, but the 8088
  1272. takes 24 clocks.%@NL@%
  1273. %@CR:26        @%%@NL@%
  1274. %@4@%On the 8088 and 8086, the effective address (EA) value must be added%@EH@%
  1275. for instructions that operate on memory operands. A displacement is any
  1276. direct memory or constant operand, or any combination of the two. Below
  1277. are the number of clocks to add for the effective address.%@NL@%
  1278. %@NL@%
  1279. %@TH: 027 01340 01 25 11 40 @%%@AU@%Components%@AE@%               %@AU@%EA Clocks%@AE@%  %@AU@%Examples%@AE@%────────────────────────────────────────────────────────────────────────Displacement             6          mov   ax,stuff                                    mov   ax,stuff+2Base or index            5          mov   ax,[bx]                                    mov   ax,[di]Displacement             9          mov   ax,[bp+8]plus base or index                  mov   ax,stuff[di]Base plus index          7          mov   ax,[bx+si](%@AB@%BP%@AE@%+%@AB@%DI%@AE@%,%@AB@%BX%@AE@%+%@AB@%SI%@AE@%)                       mov   ax,[bp+di]Base plus index          8          mov   ax,[bx+di](%@AB@%BP%@AE@%+%@AB@%SI%@AE@%,%@AB@%BX%@AE@%+%@AB@%DI%@AE@%)                       mov   ax,[bp+si]Base plus index          11         mov   ax,stuff[bx+si]plus displacement                   mov   ax,[bp+di+8](%@AB@%BP%@AE@%+%@AB@%DI%@AE@%+%@AI@%disp%@AE@%,%@AB@%BX%@AE@%+%@AB@%SI%@AE@%+%@AI@%disp%@AE@%)Base plus index          12         mov   ax,stuff[bx+di]plus displacement                   mov   ax,[bp+si+20](%@AB@%BP%@AE@%+%@AB@%SI%@AE@%+%@AI@%disp%@AE@%,%@AB@%BX%@AE@%+%@AB@%DI%@AE@%+%@AI@%disp%@AE@%)Segment override         EA+2       mov   ax,es:stuff                                    mov   ax,ds:[bp+10]%@TE: 027 01340 01 25 11 40 @%
  1280. %@NL@%
  1281. %@3@%%@AB@%Timings on the 80286 and 80386 Processors%@CR:Proc1.4.2 @%%@AE@%%@EH@%%@QR:80286 timing@%%@QR:80386 timing@%%@QR:processors timing@%%@NL@%
  1282. %@NL@%
  1283. %@4@%On the 80286 and 80386 processors, the effective address calculation is%@EH@%
  1284. handled by hardware and is therefore not a factor in clock calculations
  1285. except in one case. If a memory operand includes all three possible
  1286. elements--a displacement, a base register, and an index register--then
  1287. ADD one clock. Examples are shown below.%@NL@%
  1288. %@NL@%
  1289. mov        ax,[bx+di]         ;No extra%@NL@%
  1290. mov        ax,array[bx+di]    ;One extra%@NL@%
  1291. mov        ax,[bx+di+6]       ;One extra%@NL@%
  1292. %@NL@%
  1293. %@4@%Note: 80186 and 80188 timings are different from 8088, 8086, and 80286%@EH@%
  1294. timings. They are not shown in this manual.  Timings are also not shown
  1295. for protected-mode transfers through gates or for the virtual 8086 mode
  1296. available on the 80386 processor.%@NL@%
  1297. %@NL@%
  1298. %@CR:27        @%%@NL@%
  1299. %@3@%%@AB@%Interpreting Encodings%@CR:Proc1.5   @%%@AE@%%@EH@%%@QR:interpreting encodings@%%@QR:processor encodings@%%@QR:processor encoding@%%@QR:encodings@%%@QR:encoding@%%@NL@%
  1300. %@NL@%
  1301. %@4@%Encodings are shown for each variation of the instruction. This section%@EH@%
  1302. describes encoding for all processors except the 80386. The encodings
  1303. take the form of boxes filled with 0s and 1s for bits that are constant
  1304. for the instruction variation, and abbreviations (in italics) for the
  1305. following variable bits or bitfields:%@NL@%
  1306. %@NL@%
  1307. %@AI@%d%@AE@%         %@AU@%Direction bit.%@AE@% If set, do memory to register or register to 
  1308.           register; the %@AI@%reg%@AE@% field is the destination. If cleared, do
  1309.           register to memory; the %@AI@%reg%@AE@% field is the source.%@NL@%
  1310. %@NL@%
  1311. %@AI@%w%@AE@%         %@AU@%Word/byte bit.%@AE@% If set, use 16-bit operands. If cleared, use
  1312.           8-bit operands.%@NL@%
  1313. %@NL@%
  1314. %@AI@%s%@AE@%         %@AU@%Sign bit.%@AE@% If set, sign-extend 8-bit immediate data to 16 bits.%@NL@%
  1315. %@NL@%
  1316. %@AI@%mod%@AE@%       %@AU@%Mode.%@AE@% This two-bit field gives the register/memory mode with
  1317.           displacement. The possible values are shown below.%@NL@%
  1318. %@NL@%
  1319.           %@AU@%mod%@AE@%  %@AU@%Meaning%@AE@%%@NL@%
  1320. %@NL@%
  1321.           00   This value can have two meanings:%@NL@%
  1322. %@NL@%
  1323.                If r/m is 110, a direct memory operand is used.%@NL@%
  1324. %@NL@%
  1325.                If r/m is not 110, the displacement is 0 and an
  1326.                indirect memory operand is used. The operand must
  1327.                be based, indexed, or based indexed.%@NL@%
  1328. %@NL@%
  1329.           01   An indirect memory operand is used with an 8-bit
  1330.                displacement.%@NL@%
  1331. %@NL@%
  1332.           10   An indirect memory operand is used with a 16-bit
  1333.                displacement.%@NL@%
  1334. %@NL@%
  1335.           11   A two-register instruction is used; the %@AI@%reg%@AE@% field
  1336.                specifies the destination and the %@AI@%r/m%@AE@% field specifies
  1337.                the source.%@NL@%
  1338. %@NL@%
  1339. %@AI@%reg%@AE@%       %@AU@%Register.%@AE@% This three-bit field specifies one of the general-
  1340.           purpose registers:%@NL@%
  1341. %@NL@%
  1342.           %@AU@%reg%@AE@%     %@AU@%16-bit if w=1%@AE@%     %@AU@%8-bit if w=0%@AE@%%@NL@%
  1343.           000     %@AB@%AX                AL%@AE@%%@NL@%
  1344.           001     %@AB@%CX                CL%@AE@%%@NL@%
  1345.           010     %@AB@%DX                DL%@AE@%%@NL@%
  1346.           011     %@AB@%BX                BL%@AE@%%@NL@%
  1347.           100     %@AB@%SP                AH%@AE@%%@NL@%
  1348.           101     %@AB@%BP                CH%@AE@%%@NL@%
  1349.           110     %@AB@%SI                DH%@AE@%%@NL@%
  1350.           111     %@AB@%DI                BH%@AE@%%@NL@%
  1351. %@NL@%
  1352.           The %@AI@%reg%@AE@% field is sometimes used to specify encoding
  1353.           information rather than a register. %@NL@%
  1354. %@CR:28        @%%@NL@%
  1355. %@AI@%sreg%@AE@%      %@AU@%Segment register.%@AE@% This field specifies one of the segment 
  1356.           registers.%@NL@%
  1357. %@NL@%
  1358.           %@AU@%sreg%@AE@%    %@AU@%Register%@AE@%%@NL@%
  1359.           000     %@AB@%ES%@AE@%%@NL@%
  1360.           001     %@AB@%CS%@AE@%%@NL@%
  1361.           010     %@AB@%SS%@AE@%%@NL@%
  1362.           011     %@AB@%DS%@AE@%%@NL@%
  1363. %@NL@%
  1364. %@AI@%r/m%@AE@%       %@AU@%Register/memory.%@AE@% This three-bit field specifies a memory or
  1365.           register operand.%@NL@%
  1366. %@NL@%
  1367.           If the %@AI@%mod%@AE@% field is 11, %@AI@%r/m%@AE@% specifies the source register 
  1368.           using the %@AI@%reg%@AE@% field codes. Otherwise, the field has one of the
  1369.           following values:%@NL@%
  1370. %@NL@%
  1371.           %@AU@%r/m%@AE@%      %@AU@%Operand Address%@AE@%%@NL@%
  1372.           000      %@AB@%DS%@AE@%:[%@AB@%BX%@AE@%+%@AB@%SI%@AE@%+%@AI@%disp%@AE@%]%@NL@%
  1373.           001      %@AB@%DS%@AE@%:[%@AB@%BX%@AE@%+%@AB@%DI%@AE@%+%@AI@%disp%@AE@%]%@NL@%
  1374.           010      %@AB@%SS%@AE@%:[%@AB@%BP%@AE@%+%@AB@%SI%@AE@%+%@AI@%disp%@AE@%]%@NL@%
  1375.           011      %@AB@%SS%@AE@%:[%@AB@%BP%@AE@%+%@AB@%DI%@AE@%+%@AI@%disp%@AE@%]%@NL@%
  1376.           100      %@AB@%DS%@AE@%:[%@AB@%SI%@AE@%+%@AI@%disp%@AE@%]%@NL@%
  1377.           101      %@AB@%DS%@AE@%:[%@AB@%DI%@AE@%+%@AI@%disp%@AE@%]%@NL@%
  1378.           110      %@AB@%DS%@AE@%:[%@AB@%BP%@AE@%+%@AI@%disp%@AE@%]%@FN@%
  1379. %@FC@%1. If %@AI@%mod%@AE@% is 00 and %@AI@%r/m%@AE@% is 110, then the operand is treated as a direct
  1380. %@FC@%memory operand. This means that the operand [BP] is encoded as [BP+0]
  1381. %@FC@%rather than having a short-form like other register indirect operands.
  1382. %@FC@%Encoding [BX] takes one byte, but encoding [BP] takes two.%@EF@%1%@NL@%
  1383.           111      %@AB@%DS%@AE@%:[%@AB@%BX%@AE@%+%@AI@%disp%@AE@%]%@NL@%
  1384. %@NL@%
  1385. %@AI@%disp%@AE@%      %@AU@%Displacement.%@AE@% These bytes give the offset for memory operands.
  1386.           The possible lengths (in bytes) are shown in parentheses.%@NL@%
  1387. %@NL@%
  1388. %@AI@%data%@AE@%      %@AU@%Data.%@AE@% These bytes gives the actual value for constant values.
  1389.           The possible lengths (in bytes) are shown in parentheses.%@NL@%
  1390. %@NL@%
  1391. %@4@%If a memory operand has a segment override, the entire instruction has%@EH@%
  1392. one of the following bytes as a prefix:%@NL@%
  1393. %@NL@%
  1394. %@AU@%Segment%@AE@%   %@AU@%Prefix%@AE@%%@NL@%
  1395. %@AB@%CS%@AE@%        00101110   (2Eh)%@NL@%
  1396. %@AB@%DS%@AE@%        00111110   (3Eh)%@NL@%
  1397. %@AB@%ES%@AE@%        00100110   (26h)%@NL@%
  1398. %@AB@%SS%@AE@%        00110110   (36h)%@NL@%
  1399. %@NL@%
  1400. %@CR:29        @%%@NL@%
  1401. %@AB@%■  Example%@AE@%%@NL@%
  1402. %@NL@%
  1403. %@4@%As an example, assume you want to calculate the encoding for the%@EH@%
  1404. following statement (where %@AS@%warray%@AE@% is a 16-bit variable):%@NL@%
  1405. %@NL@%
  1406. add   warray[bx+di],-3%@NL@%
  1407. %@NL@%
  1408. %@4@%First look up the encoding for the immediate to memory syntax of the%@EH@%
  1409. %@AB@%ADD%@AE@% instruction:%@NL@%
  1410. %@NL@%
  1411. %@NL@%
  1412. ┌───────────┐ ┌─────────────┐%@NL@%
  1413. │ 100000%@AI@%sw%@AE@%  │ │ %@AI@%mod%@AE@%,000,%@AI@%r/m%@AE@% │     %@AI@%disp%@AE@% %@AI@%(0%@AE@% %@AI@%or%@AE@% %@AI@%2)%@AE@%     %@AI@%data%@AE@% %@AI@%(1%@AE@% %@AI@%or%@AE@% %@AI@%2)%@AE@%%@NL@%
  1414. └───────────┘ └─────────────┘%@NL@%
  1415. %@NL@%
  1416. %@NL@%
  1417. %@4@%Since the destination is a word operand, the %@AI@%w%@AE@% bit will be set. The 8-%@EH@%
  1418. bit immediate data must be sign-extended to 16 bits in order to fit into
  1419. the operand, so the %@AI@%s%@AE@% bit is also set. The first byte of the instruction
  1420. is therefore 10000011 (83h).%@NL@%
  1421. %@NL@%
  1422. %@4@%Since the memory operand can be anywhere in the segment, it must have%@EH@%
  1423. a 16-bit offset (displacement). Therefore the %@AI@%mod%@AE@% field is 10. The %@AI@%reg%@AE@%
  1424. field is 000, as shown in the encoding. The %@AI@%r/m%@AE@% coding for [bx+di+%@AI@%disp%@AE@%]
  1425. is 001. The second byte is 10000001 (81h).%@NL@%
  1426. %@NL@%
  1427. %@4@%The next two bytes are the offset of %@AS@%warray%@AE@%. The high byte of the offset%@EH@%
  1428. is stored first and the low byte second. For this example, assume that
  1429. %@AS@%warray%@AE@% is located at offset 10EFh.%@NL@%
  1430. %@NL@%
  1431. %@4@%The last byte of the instruction is used to store the 8-bit immediate%@EH@%
  1432. value -3 (FDh). This value is encoded as 8 bits (but sign-extended to
  1433. 16 bits by the processor).%@NL@%
  1434. %@NL@%
  1435. %@4@%The encoding is shown below in hexadecimal:%@EH@%%@NL@%
  1436. %@NL@%
  1437. 83 81 EF 10 FD %@NL@%
  1438. %@NL@%
  1439. %@4@%You can confirm this by assembling the instruction and looking at the%@EH@%
  1440. resulting assembly listing.%@NL@%
  1441. %@NL@%
  1442. %@NL@%
  1443. %@3@%%@AB@%Interpreting 80386 Encoding Extensions%@CR:Proc1.6   @%%@AE@%%@EH@%%@QR:80386 encoding extensions@%%@QR:80386 extensions@%%@QR:interpreting 80386 encoding@%%@QR:interpreting 80386 extensions@%%@NL@%
  1444. %@NL@%
  1445. %@4@%This manual shows 80386 encodings for instructions that are available%@EH@%
  1446. only on the 80386 processor. For other instructions, encodings are shown
  1447. only for the 16-bit subset available on all processors. This section
  1448. tells how to convert the 80286 encodings shown in the manual to 80386
  1449. encodings that use extensions such as 32-bit registers and memory
  1450. operands.%@NL@%
  1451. %@NL@%
  1452. %@4@%The extended 80386 encodings differ in that they can have additional%@EH@%
  1453. prefix bytes, a Scaled Index Base (SIB) byte, and 32-bit displacement
  1454. and immediate bytes. Use of these elements is closely tied to the
  1455. %@CR:30        @%segment word size. The use type of the code segment determines whether
  1456. the instructions are processed in 32-bit mode (%@AB@%USE32%@AE@%) or 16-bit mode
  1457. (%@AB@%USE16%@AE@%). Current versions of MS-DOS(R) and announced versions of OS/2 use
  1458. 16-bit mode only.%@NL@%
  1459. %@NL@%
  1460. %@4@%The bytes that can appear in an instruction encoding are shown below.%@EH@%%@NL@%
  1461. %@NL@%
  1462. %@NL@%
  1463. %@3@%%@AB@%80286 Encoding%@CR:Proc1.6.1 @%%@AE@%%@EH@%%@QR:80286 encoding@%%@NL@%
  1464. %@NL@%
  1465. %@NL@%
  1466. ┌──────────┐┌──────────┐┌────────┐┌────────┐%@NL@%
  1467. │ Opcode   ││ %@AI@%mod-reg-%@AE@% ││ %@AI@%disp%@AE@%   ││ %@AI@%immed%@AE@%  │%@NL@%
  1468. │          ││   %@AI@%r/m%@AE@%    ││        ││        │%@NL@%
  1469. │ (1-2)    ││  (0-1)   ││ (0-2)  ││ (0-2)  │%@NL@%
  1470. └──────────┘└──────────┘└────────┘└────────┘%@NL@%
  1471. %@NL@%
  1472. %@NL@%
  1473. %@3@%%@AB@%80386 Encoding%@CR:Proc1.6.2 @%%@AE@%%@EH@%%@QR:80386 encoding@%%@NL@%
  1474. %@NL@%
  1475. %@NL@%
  1476. ┌──────────┐┌──────────┐┌────────┐┌────────┐┌──────────┐┌───────┐┌──────┐%@NL@%
  1477. │ Address- ││ Operand- ││ Opcode ││%@AI@%mod-reg-%@AE@%││  Scaled  ││ %@AI@%disp%@AE@%  ││%@AI@%immed%@AE@% │%@NL@%
  1478. │Size (67h)││Size (66h)││        ││  %@AI@%r/m%@AE@%   ││Index Base││       ││      │%@NL@%
  1479. │  (0-1)   ││  (0-1)   ││  (1-2) ││ (0-1)  ││   (0-1)  ││ (0-4) ││(0-4) │%@NL@%
  1480. └──────────┘└──────────┘└────────┘└────────┘└──────────┘└───────┘└──────┘%@NL@%
  1481. %@NL@%
  1482. %@NL@%
  1483. %@4@%Additional bytes may be added for a segment prefix, a repeat prefix, or%@EH@%
  1484. the %@AB@%LOCK%@AE@% prefix.%@NL@%
  1485. %@NL@%
  1486. %@NL@%
  1487. %@3@%%@AB@%Address-Size Prefix%@CR:Proc1.6.3 @%%@AE@%%@EH@%%@QR:address-size prefix@%%@QR:address size prefix@%%@QR:address-size@%%@QR:address size@%%@QR:processor address-size@%%@QR:processor address size@%%@QR:address prefix@%%@QR:processor address prefix@%%@NL@%
  1488. %@NL@%
  1489. %@4@%The address-size prefix determines the segment word size of the%@EH@%
  1490. operation. It can override the default size for calculating the
  1491. displacement of memory addresses. The address prefix byte is 67h.
  1492. %@AB@%MASM%@AE@% automatically inserts this byte where appropriate.%@NL@%
  1493. %@NL@%
  1494. %@4@%In 32-bit mode (%@AB@%USE32%@AE@% code segment), displacements are calculated as%@EH@%
  1495. 32-bit addresses. The effective address-size prefix must be used for any
  1496. instructions that must calculate addresses as 16-bit displacements. In
  1497. 16-bit mode the defaults are reversed. The prefix must be used to
  1498. specify calculation of 32-bit displacements.%@NL@%
  1499. %@NL@%
  1500. %@NL@%
  1501. %@3@%%@AB@%Operand-Size Prefix%@CR:Proc1.6.4 @%%@AE@%%@EH@%%@NL@%
  1502. %@QR:operand-size prefix@%%@QR:operand size prefix@%%@QR:operand-size@%%@QR:operand size@%%@QR:processor operand-size@%%@QR:processor operand size@%%@QR:operand prefix@%%@QR:processor operand prefix@%%@NL@%
  1503. %@NL@%
  1504. %@4@%The operand-size prefix determines the size of operands. It can override%@EH@%
  1505. the default size of registers or memory operands. The operand-size
  1506. prefix byte is 66h. %@AB@%MASM%@AE@% automatically inserts this byte where
  1507. appropriate.%@NL@%
  1508. %@NL@%
  1509. %@4@%In 32-bit mode, the default sizes for operands are 8 bits and 32 bits%@EH@%
  1510. (depending on the %@AI@%w%@AE@% bit). The operand-size prefix must be used for any
  1511. instructions that use 16-bit operands. In 16-bit mode, the default sizes
  1512. are 8 bits and 16 bits. The prefix must be used for any instructions
  1513. that use 32-bit  operands.%@NL@%
  1514. %@NL@%
  1515. %@CR:31        @%%@NL@%
  1516. %@3@%%@AB@%Encoding Differences for 32-bit Operations%@CR:Proc1.6.5 @%%@AE@%%@EH@%%@QR:32 bit differences@%%@QR:32-bit differences@%%@QR:encoding differences@%%@QR:32-bit operations@%%@QR:32 bit operations@%%@NL@%
  1517. %@NL@%
  1518. %@4@%When 32-bit operations are performed, the meaning of certain bits or%@EH@%
  1519. fields are different than for 16-bit operations. The changes may affect
  1520. default operations in 32-bit mode, or 16-bit mode operations in which
  1521. the address-size prefix or the operand-size prefix is used. The
  1522. following fields may have a different meaning for 32-bit operations
  1523. than the meaning described in the Interpreting Encodings section:%@NL@%
  1524. %@NL@%
  1525. %@AI@%w%@AE@%         %@AU@%Word/byte bit.%@AE@% If set, use 32-bit operands. If cleared, use
  1526.           8-bit operands.%@NL@%
  1527. %@NL@%
  1528. %@AI@%s%@AE@%         %@AU@%Sign bit.%@AE@% If set, sign-extend 8-bit or 16-bit immediate data
  1529.           to 32 bits.%@NL@%
  1530. %@NL@%
  1531. %@AI@%mod%@AE@%       %@AU@%Mode.%@AE@% This field indicates the register/memory mode. The value
  1532.           11 still indicates a register-to-register operation with %@AI@%r/m%@AE@%
  1533.           containing the code for a 32-bit source register. However,
  1534.           other codes have different meanings as shown in the tables
  1535.           in the next section.%@NL@%
  1536. %@NL@%
  1537. %@AI@%reg%@AE@%       %@AU@%Register.%@AE@% The codes for 16-bit registers are extended to 32-
  1538.           bit registers. For example, if the reg field is 000, %@AB@%EAX%@AE@% is
  1539.           used instead of %@AB@%AX%@AE@%. Use of 8-bit registers is unchanged.%@NL@%
  1540. %@NL@%
  1541. %@AI@%sreg%@AE@%      %@AU@%Segment register.%@AE@% The 80386 has the following additional
  1542.           segment registers:%@NL@%
  1543. %@NL@%
  1544.           %@AU@%sreg%@AE@%     %@AU@%Register%@AE@%%@NL@%
  1545.           100      %@AB@%FS%@AE@%%@NL@%
  1546.           101      %@AB@%GS%@AE@%%@NL@%
  1547. %@NL@%
  1548. %@AI@%r/m%@AE@%       %@AU@%Register/memory.%@AE@% If the %@AI@%r/m%@AE@% field is used for the source
  1549.           register, 32-bit registers are used as for the %@AI@%reg%@AE@% field.
  1550.           If the field is used for memory operands, the meaning is
  1551.           completely different than for 16-bit operations, as shown
  1552.           in the tables in the next section.%@NL@%
  1553. %@NL@%
  1554. %@AI@%disp%@AE@%      %@AU@%Displacement.%@AE@% This field is four bytes for 32-bit addresses.%@NL@%
  1555. %@NL@%
  1556. %@AI@%data%@AE@%      %@AU@%Data.%@AE@% Immediate data can be up to four bytes.%@NL@%
  1557. %@NL@%
  1558. %@CR:32        @%%@NL@%
  1559. %@3@%%@AB@%Scaled Index Base Byte%@CR:Proc1.6.6 @%%@AE@%%@EH@%%@QR:scaled index base byte@%%@QR:scaled index byte@%%@QR:scaled index base@%%@QR:scaled base byte@%%@QR:base byte@%%@NL@%
  1560. %@NL@%
  1561. %@4@%Many 80386 extended memory operands are too complex to be represented by%@EH@%
  1562. a single %@AI@%mod-reg-r/m%@AE@% byte. For these operands, a value of 100 in the %@AI@%r/m%@AE@%
  1563. field signals the presence of a second encoding byte called the Scaled
  1564. Index Base (SIB) byte. The SIB byte is made up of the following fields:%@NL@%
  1565. %@NL@%
  1566. %@NL@%
  1567.                   ┌────────────────────────┐%@NL@%
  1568.                   │ %@AI@%ss%@AE@%      %@AI@%index%@AE@%     %@AI@%base%@AE@% │%@NL@%
  1569.                   └────────────────────────┘%@NL@%
  1570. %@NL@%
  1571. %@NL@%
  1572. %@AI@%ss%@AE@%        %@AU@%Scaling Field.%@AE@% This two-bit field specifies one of the
  1573.           following scaling factors:%@NL@%
  1574. %@NL@%
  1575.           %@AU@%ss%@AE@%       %@AU@%Factor%@AE@%%@NL@%
  1576.           00       1%@NL@%
  1577.           01       2%@NL@%
  1578.           10       4%@NL@%
  1579.           11       8%@NL@%
  1580. %@NL@%
  1581. %@AI@%index%@AE@%     %@AU@%Index Register.%@AE@% This three-bit field specifies one of the
  1582.           following index registers:%@NL@%
  1583. %@NL@%
  1584.           %@AU@%index%@AE@%    %@AU@%Register%@AE@%%@NL@%
  1585.           000      %@AB@%EAX%@AE@%%@NL@%
  1586.           001      %@AB@%ECX%@AE@%%@NL@%
  1587.           010      %@AB@%EDX%@AE@%%@NL@%
  1588.           011      %@AB@%EBX%@AE@%%@NL@%
  1589.           100      no index%@NL@%
  1590.           101      %@AB@%EBP%@AE@%%@NL@%
  1591.           110      %@AB@%ESI%@AE@%%@NL@%
  1592.           111      %@AB@%EDI%@AE@%%@NL@%
  1593. %@NL@%
  1594.           Note that %@AB@%ESP%@AE@% cannot be an index register. If the %@AI@%index%@AE@% field
  1595.           is 100, then the %@AI@%ss%@AE@% field must be 00.%@NL@%
  1596. %@NL@%
  1597. %@AI@%base%@AE@%      %@AU@%Base Register.%@AE@% This three-bit field combines with the %@AI@%mod%@AE@%
  1598.           field to specify the base register and the displacement. Note
  1599.           that the %@AI@%base%@AE@% field only specifies the base when the %@AI@%r/m%@AE@% field
  1600.           is 100. Otherwise the %@AI@%r/m%@AE@% field specifies the base.%@NL@%
  1601. %@CR:33        @%%@NL@%
  1602. %@4@%The possible combinations of the %@AI@%mod%@AE@%, %@AI@%r/m%@AE@%, %@AI@%scale%@AE@%, %@AI@%index%@AE@%, and %@AI@%base%@AE@% fields%@EH@%
  1603. are shown below.%@NL@%
  1604. %@NL@%
  1605. %@TH:  31  4746 04 28 48 @%%@AB@%Fields for 32-bit           Fields for 32-bit%@AE@%%@AB@%Nonindexed Operands         Indexed Operands%@AE@%────────────────────────────────────────────────────────────────────────%@AU@%mod%@AE@% %@AU@%r/m%@AE@%  %@AU@%Operand%@AE@%            %@AU@%mod%@AE@% %@AU@%r/m%@AE@%  %@AU@%base%@AE@% %@AU@%Operand%@AE@%00  000  %@AB@%DS%@AE@%:[%@AB@%EAX%@AE@%]         ▒ 00  100  000  %@AB@%DS%@AE@%:[%@AB@%EAX%@AE@%+(%@AI@%scale%@AE@%*%@AI@%index%@AE@%)]00  001  %@AB@%DS%@AE@%:[%@AB@%ECX%@AE@%]         ▒ 00  100  001  %@AB@%DS%@AE@%:[%@AB@%ECX%@AE@%+(%@AI@%scale%@AE@%*%@AI@%index%@AE@%)]00  010  %@AB@%DS%@AE@%:[%@AB@%EDX%@AE@%]         ▒ 00  100  010  %@AB@%DS%@AE@%:[%@AB@%EDX%@AE@%+(%@AI@%scale%@AE@%*%@AI@%index%@AE@%)]00  011  %@AB@%DS%@AE@%:[%@AB@%EBX%@AE@%]         ▒ 00  100  011  %@AB@%DS%@AE@%:[%@AB@%EBX%@AE@%+(%@AI@%scale%@AE@%*%@AI@%index%@AE@%)]00  100  %@AB@%SIB%@AE@% used───────> ▒ 00  100  100  %@AB@%SS:%@AE@%[%@AB@%ESP%@AE@%+(%@AI@%scale%@AE@%*%@AI@%index%@AE@%)]00  101  %@AB@%DS%@AE@%:%@AI@%disp32%@AE@%%@FN@%%@FC@%The operand [EBP] must be encoded as [EBP+0] (the 0 is an 8-bit %@FC@%displacement). Similarly, [EBP+(%@AI@%scale%@AE@%*%@AI@%index%@AE@%)] must be encoded as %@FC@%[EBP+(%@AI@%scale%@AE@%*%@AI@%index%@AE@%)+0]. The short encoding form available with other base %@FC@%registers cannot be used with %@AB@%EBP%@AE@%.%@FC@%%@EF@%1      ▒ 00  100  101  %@AB@%DS%@AE@%:[%@AB@%disp%@AE@%32+(%@AI@%scale%@AE@%*%@AI@%index%@AE@%)]%@FN@%%@FC@%The operand [EBP] must be encoded as [EBP+0] (the 0 is an 8-bit %@FC@%displacement). Similarly, [EBP+(%@AI@%scale%@AE@%*%@AI@%index%@AE@%)] must be encoded as %@FC@%[EBP+(%@AI@%scale%@AE@%*%@AI@%index%@AE@%)+0]. The short encoding form available with other base %@FC@%registers cannot be used with %@AB@%EBP%@AE@%.%@FC@%%@EF@%100  110  %@AB@%DS%@AE@%:[%@AB@%ESI%@AE@%]]        ▒ 00  100  110  %@AB@%DS%@AE@%:[%@AB@%ESI+%@AE@%(%@AI@%scale%@AE@%*%@AI@%index%@AE@%)]00  111  %@AB@%DS%@AE@%:[%@AB@%EDI%@AE@%]         ▒ 00  100  111  %@AB@%DS%@AE@%:[%@AB@%EDI%@AE@%+(%@AI@%scale%@AE@%*%@AI@%index%@AE@%)]01  000  %@AB@%DS%@AE@%:[%@AB@%EAX%@AE@%+%@AI@%disp8%@AE@%]   ▒ 01  100  000  %@AB@%DS%@AE@%:[%@AB@%EAX%@AE@%+(%@AI@%scale%@AE@%*%@AI@%index%@AE@%)+%@AI@%disp8%@AE@%]01  001  %@AB@%DS%@AE@%:[%@AB@%ECX%@AE@%+%@AI@%disp8%@AE@%]   ▒ 01  100  001  %@AB@%DS%@AE@%:[%@AB@%ECX%@AE@%+(%@AI@%scale%@AE@%*%@AI@%index%@AE@%)+%@AI@%disp8%@AE@%]01  010  %@AB@%DS%@AE@%:[%@AB@%EDX%@AE@%+%@AI@%disp8%@AE@%]   ▒ 01  100  010  %@AB@%DS%@AE@%:[%@AB@%EDX%@AE@%+(%@AI@%scale%@AE@%*%@AI@%index%@AE@%)+%@AI@%disp8%@AE@%]01  011  %@AB@%DS%@AE@%:[%@AB@%EBX%@AE@%+%@AI@%disp8%@AE@%]   ▒ 01  100  011  %@AB@%DS%@AE@%:[%@AB@%EBX%@AE@%+(%@AI@%scale%@AE@%*%@AI@%index%@AE@%)+%@AI@%disp8%@AE@%]01  100  %@AB@%SIB%@AE@% used───────> ▒ 01  100  100  %@AB@%SS:%@AE@%[%@AB@%ESP%@AE@%+(%@AI@%scale%@AE@%*%@AI@%index%@AE@%)+%@AI@%disp8%@AE@%]01  101  %@AB@%SS:%@AE@%[%@AB@%EBP%@AE@%+%@AI@%disp8%@AE@%]   ▒ 01  100  101  %@AB@%SS:%@AE@%[%@AB@%EBP%@AE@%+(%@AI@%scale%@AE@%*%@AI@%index%@AE@%)+%@AI@%disp8%@AE@%]01  110  %@AB@%DS%@AE@%:[%@AB@%ESI%@AE@%+%@AI@%disp8%@AE@%]   ▒ 01  100  110  %@AB@%DS%@AE@%:[%@AB@%ESI+%@AE@%(%@AI@%scale%@AE@%*%@AI@%index%@AE@%)+%@AI@%disp8%@AE@%]01  111  %@AB@%DS%@AE@%:[%@AB@%EDI%@AE@%+disp8]   ▒ 01  100  111  %@AB@%DS%@AE@%:[%@AB@%EDI%@AE@%+(%@AI@%scale%@AE@%*%@AI@%index%@AE@%)+%@AI@%disp8%@AE@%]10  000  %@AB@%DS%@AE@%:[%@AB@%EAX%@AE@%+%@AI@%disp32%@AE@%]  ▒ 10  100  000  %@AB@%DS%@AE@%:[%@AB@%EAX%@AE@%+(%@AI@%scale%@AE@%*%@AI@%index%@AE@%)+%@AI@%disp32%@AE@%]10  001  %@AB@%DS%@AE@%:[%@AB@%ECX%@AE@%+%@AI@%disp32%@AE@%]  ▒ 10  100  001  %@AB@%DS%@AE@%:[%@AB@%ECX%@AE@%+(%@AI@%scale%@AE@%*%@AI@%index%@AE@%)+%@AI@%disp32%@AE@%]10  010  %@AB@%DS%@AE@%:[%@AB@%EDX%@AE@%+%@AI@%disp32%@AE@%]  ▒ 10  100  010  %@AB@%DS%@AE@%:[%@AB@%EDX%@AE@%+(%@AI@%scale%@AE@%*%@AI@%index%@AE@%)+%@AI@%disp32%@AE@%]10  011  %@AB@%DS%@AE@%:[%@AB@%EBX%@AE@%+%@AI@%disp32%@AE@%]  ▒ 10  100  011  %@AB@%DS%@AE@%:[%@AB@%EBX%@AE@%+(%@AI@%scale%@AE@%*%@AI@%index%@AE@%)+%@AI@%disp32%@AE@%]10  100  %@AB@%SIB%@AE@% used───────> ▒ 10  100  100  %@AB@%SS:%@AE@%[%@AB@%ESP%@AE@%+(%@AI@%scale%@AE@%*%@AI@%index%@AE@%)+%@AI@%disp32%@AE@%]10  101  %@AB@%SS:%@AE@%[%@AB@%EBP%@AE@%+%@AI@%disp32%@AE@%]  ▒ 10  100  101  %@AB@%SS:%@AE@%[%@AB@%EBP%@AE@%+(%@AI@%scale%@AE@%*%@AI@%index%@AE@%)+%@AI@%disp32%@AE@%]10  110  %@AB@%DS%@AE@%:[%@AB@%ESI%@AE@%+%@AI@%disp32%@AE@%]  ▒ 10  100  110  %@AB@%DS%@AE@%:[%@AB@%ESI+%@AE@%(%@AI@%scale%@AE@%*%@AI@%index%@AE@%)+%@AI@%disp32%@AE@%]10  111  %@AB@%DS%@AE@%:[%@AB@%EDI%@AE@%+%@AI@%disp32%@AE@%]  ▒ 10  100  111  %@AB@%DS%@AE@%:[%@AB@%EDI%@AE@%+(%@AI@%scale%@AE@%*%@AI@%index%@AE@%)+%@AI@%disp32%@AE@%]%@TE:  31  4746 04 28 48 @%
  1606. %@4@%If a memory operand has a segment override, the entire instruction has%@EH@%
  1607. one of the prefixes discussed earlier in the Interpreting Encodings
  1608. section or one of the following prefixes for the segment registers
  1609. available only on the 80386:%@NL@%
  1610. %@NL@%
  1611. %@AU@%Segment%@AE@%   %@AU@%Prefix%@AE@%%@NL@%
  1612. %@AB@%FS%@AE@%        01100100   (64h)%@NL@%
  1613. %@AB@%GS%@AE@%        01100101   (65h)%@NL@%
  1614. %@NL@%
  1615. %@CR:34        @%%@NL@%
  1616. %@AB@%■  Example%@AE@%%@NL@%
  1617. %@NL@%
  1618. %@4@%Assume you want to calculate the encoding for the following statement%@EH@%
  1619. (where %@AS@%warray%@AE@% is a 16-bit variable). Assume also that the instruction is
  1620. used in 16-bit mode.%@NL@%
  1621. %@NL@%
  1622. add   warray[eax+ecx*2],-3%@NL@%
  1623. %@NL@%
  1624. %@4@%First look up the encoding for the immediate to memory syntax of the %@AB@%ADD%@AE@%%@EH@%
  1625. instruction:%@NL@%
  1626. %@NL@%
  1627. %@NL@%
  1628. ┌───────────┐ ┌─────────────┐%@NL@%
  1629. │ 100000%@AI@%sw%@AE@%  │ │ %@AI@%mod,%@AE@%000%@AI@%,r/m%@AE@% │     %@AI@%disp%@AE@% %@AI@%(0%@AE@% %@AI@%or%@AE@% %@AI@%2)%@AE@%     %@AI@%data%@AE@% %@AI@%(1%@AE@% %@AI@%or%@AE@% %@AI@%2)%@AE@%%@NL@%
  1630. └───────────┘ └─────────────┘%@NL@%
  1631. %@NL@%
  1632. %@NL@%
  1633. %@4@%This encoding must be expanded to account for 80386 extensions. Note%@EH@%
  1634. that the instruction operates on 16-bit data in a 16-bit mode program.
  1635. Therefore, the operand-size prefix is not needed. However, the
  1636. instruction does use 32-bit registers to calculate a 32-bit effective
  1637. address. Thus the first byte of the encoding must be the effective
  1638. address-size prefix, 01100111 (67h).%@NL@%
  1639. %@NL@%
  1640. %@4@%The opcode byte is the same (83h) as for the 80286 example described in%@EH@%
  1641. the Interpreting Encodings section.%@NL@%
  1642. %@NL@%
  1643. %@4@%The %@AI@%mod%@AE@%-%@AI@%reg%@AE@%-%@AI@%r/m%@AE@% byte must specify a based indexed operand with a scaling%@EH@%
  1644. factor of two. This operand cannot be specified with a single byte, so
  1645. the encoding must also use the SIB byte. The value 100 in the %@AI@%r/m%@AE@% field
  1646. specifies an SIB byte. The %@AI@%reg%@AE@% field is 000, as shown in the encoding.
  1647. The %@AI@%mod%@AE@% field is 10 for operands that have base and scaled index
  1648. registers and a 32-bit displacement. The combined %@AI@%mod%@AE@%, %@AI@%reg%@AE@%, and %@AI@%r/m%@AE@%
  1649. fields for the second byte are 10000100 (84h).%@NL@%
  1650. %@NL@%
  1651. %@4@%The SIB byte is next. The scaling factor is 2, so the %@AI@%ss%@AE@% field is 01.%@EH@%
  1652. The index register is %@AB@%ECX%@AE@%, so the %@AI@%index%@AE@% field is 001. The base register
  1653. is %@AB@%EAX%@AE@%, so the %@AI@%base%@AE@% field is 000. The SIB byte is 01001000 (48h).%@NL@%
  1654. %@NL@%
  1655. %@4@%The next four bytes are the offset of %@AS@%warray%@AE@%. The low bytes are stored%@EH@%
  1656. last. For this example, assume that %@AS@%warray%@AE@% is located at offset 10EFh.
  1657. This offset only requires two bytes, but four must be supplied because
  1658. of the addressing mode. A 32-bit address can be safely used in 16-bit
  1659. mode as long as the upper word is 0.%@NL@%
  1660. %@NL@%
  1661. %@4@%The last byte of the instruction is used to store the 8-bit immediate%@EH@%
  1662. value -3 (FDh).%@NL@%
  1663. %@NL@%
  1664. %@4@%The encoding is shown below in hexadecimal:%@EH@%%@NL@%
  1665. %@NL@%
  1666. 67 83 84 48 00 00 10 EF FD %@NL@%
  1667. %@NL@%
  1668. %@NL@%
  1669. %@NL@%
  1670. %@2@%%@AB@%Instructions%@CR:Proc2     @%%@AE@%%@EH@%%@NL@%
  1671. ───────────────────────────────────────────────────────────────────────────%@NL@%
  1672. %@NL@%
  1673. %@NL@%
  1674. %@CR:35        @%%@NL@%
  1675. %@3@%%@AB@%AAA%@AE@%%@CR:AAA       @%%@EH@%%@QR:aaa@%%@NL@%
  1676. %@AB@%ASCII Adjust After Addition%@AE@%%@QR:ascii adjust after addition@%%@QR:adjust after addition@%%@NL@%
  1677. ┌───┬───┬───┬───┬───┬───┬───┬───┬───┐%@NL@%
  1678. │ O │ D │ I │ T │ S │ Z │ A │ P │ C │%@NL@%
  1679. ├───┼───┼───┼───┼───┼───┼───┼───┼───┤%@NL@%
  1680. │ ? │   │   │   │ ? │ ? │ ± │ ? │ ± │%@NL@%
  1681. └───┴───┴───┴───┴───┴───┴───┴───┴───┘%@NL@%
  1682. %@NL@%
  1683. %@4@%Adjusts the result of an addition to a decimal digit (0-9).%@EH@%
  1684. The previous addition instruction should place its 8-bit sum
  1685. in %@AB@%AL%@AE@%. If the sum is greater than 9h, %@AB@%AH%@AE@% is incremented and
  1686. the carry and auxiliary carry flags are set. Otherwise, the
  1687. carry and auxiliary carry flags are cleared.%@NL@%
  1688. %@NL@%
  1689. ───────────────────────────────────────────────────────────────────────────%@NL@%
  1690. ┌───────────┐%@NL@%
  1691. │ 00110111  │%@NL@%
  1692. └───────────┘%@NL@%
  1693. ─────────────┬────────────────────────────┬────────────────────────────────%@NL@%
  1694.              │ aaa                        │ 88/86     8%@NL@%
  1695. %@AB@%AAA%@AE@%          │                            │   286     3%@NL@%
  1696.              │                            │   386     4  %@NL@%
  1697. ─────────────┴────────────────────────────┴────────────────────────────────%@NL@%
  1698. %@NL@%
  1699. %@NL@%
  1700. %@NL@%
  1701. %@3@%%@AB@%AAD%@AE@%%@CR:AAD       @%%@EH@%%@QR:aad@%%@NL@%
  1702. %@AB@%ASCII Adjust Before Division%@AE@%%@QR:ascii adjust before division@%%@QR:adjust before division@%%@NL@%
  1703. ┌───┬───┬───┬───┬───┬───┬───┬───┬───┐%@NL@%
  1704. │ O │ D │ I │ T │ S │ Z │ A │ P │ C │%@NL@%
  1705. ├───┼───┼───┼───┼───┼───┼───┼───┼───┤%@NL@%
  1706. │ ? │   │   │   │ ± │ ± │ ? │ ± │ ? │%@NL@%
  1707. └───┴───┴───┴───┴───┴───┴───┴───┴───┘%@NL@%
  1708. %@NL@%
  1709. %@4@%Converts unpacked BCD digits in %@AB@%AH%@AE@% (most significant digit)%@EH@%
  1710. and %@AB@%AL%@AE@% (least significant digit) to a binary number in %@AB@%AX%@AE@%.
  1711. The instruction is often used to prepare an unpacked BCD
  1712. number in %@AB@%AX%@AE@% for division by an unpacked BCD digit in an
  1713. 8-bit register.%@NL@%
  1714. %@NL@%
  1715. ───────────────────────────────────────────────────────────────────────────%@NL@%
  1716. ┌───────────┐  ┌───────────┐%@NL@%
  1717. │ 11010101  │  │ 00001010  │%@NL@%
  1718. └───────────┘  └───────────┘%@NL@%
  1719. ─────────────────┬────────────────────────┬────────────────────────────────%@NL@%
  1720.                  │ aad                    │ 88/86     60%@NL@%
  1721. %@AB@%AAD%@AE@%              │                        │   286     14%@NL@%
  1722.                  │                        │   386     19%@NL@%
  1723. ─────────────────┴────────────────────────┴────────────────────────────────%@NL@%
  1724. %@NL@%
  1725. %@NL@%
  1726. %@CR:36        @%%@NL@%
  1727. %@3@%%@AB@%AAM%@AE@%%@CR:AAM       @%%@EH@%%@QR:aam@%%@NL@%
  1728. %@AB@%ASCII Adjust After Multiply%@AE@%%@QR:ascii adjust after multiply@%%@QR:adjust after multiply@%%@NL@%
  1729. ┌───┬───┬───┬───┬───┬───┬───┬───┬───┐%@NL@%
  1730. │ O │ D │ I │ T │ S │ Z │ A │ P │ C │%@NL@%
  1731. ├───┼───┼───┼───┼───┼───┼───┼───┼───┤%@NL@%
  1732. │ ? │   │   │   │ ± │ ± │ ? │ ± │ ? │%@NL@%
  1733. └───┴───┴───┴───┴───┴───┴───┴───┴───┘%@NL@%
  1734. %@NL@%
  1735. %@4@%Converts an 8-bit binary number less than 100 decimal in %@AB@%AL%@AE@%%@EH@%
  1736. to an unpacked BCD number in %@AB@%AX%@AE@%. The most significant digit
  1737. goes in %@AB@%AH%@AE@% and the least significant in %@AB@%AL%@AE@%. This instruction
  1738. is often used to adjust the product after a %@AB@%MUL%@AE@% instruction
  1739. that multiplies unpacked BCD digits in %@AB@%AH%@AE@% and %@AB@%AL%@AE@%. It is also
  1740. used to adjust the quotient after a %@AB@%DIV%@AE@% instruction that
  1741. divides a binary number less than 100 decimal in %@AB@%AX%@AE@% by an
  1742. unpacked BCD number.%@NL@%
  1743. %@NL@%
  1744. ───────────────────────────────────────────────────────────────────────────%@NL@%
  1745. ┌───────────┐ ┌───────────┐%@NL@%
  1746. │ 11010100  │ │ 00001010  │%@NL@%
  1747. └───────────┘ └───────────┘%@NL@%
  1748. ─────────────────┬────────────────────────┬────────────────────────────────%@NL@%
  1749.                  │ aam                    │ 88/86     83%@NL@%
  1750. %@AB@%AAM%@AE@%              │                        │   286     16%@NL@%
  1751.                  │                        │   386     17%@NL@%
  1752. ─────────────────┴────────────────────────┴────────────────────────────────%@NL@%
  1753. %@NL@%
  1754. %@NL@%
  1755. %@NL@%
  1756. %@3@%%@AB@%AAS%@AE@%%@CR:AAS       @%%@EH@%%@QR:aas@%%@NL@%
  1757. %@AB@%ASCII Adjust After Subtraction%@AE@%%@QR:ascii adjust after subtraction@%%@QR:adjust after subtraction@%%@NL@%
  1758. ┌───┬───┬───┬───┬───┬───┬───┬───┬───┐%@NL@%
  1759. │ O │ D │ I │ T │ S │ Z │ A │ P │ C │%@NL@%
  1760. ├───┼───┼───┼───┼───┼───┼───┼───┼───┤%@NL@%
  1761. │ ? │   │   │   │ ? │ ? │ ± │ ? │ ± │%@NL@%
  1762. └───┴───┴───┴───┴───┴───┴───┴───┴───┘%@NL@%
  1763. %@NL@%
  1764. %@4@%Adjusts the result of a subtraction to a decimal digit%@EH@%
  1765. (0-9). The previous subtraction instruction should place its
  1766. 8-bit result in %@AB@%AL%@AE@%. If the result is greater than 9h, then %@AB@%AH%@AE@%
  1767. is decremented and the carry and auxiliary carry flags are
  1768. set. Otherwise, the carry and auxiliary carry flags are
  1769. cleared.%@NL@%
  1770. %@NL@%
  1771. ───────────────────────────────────────────────────────────────────────────%@NL@%
  1772. ┌───────────┐%@NL@%
  1773. │ 00111111  │%@NL@%
  1774. └───────────┘%@NL@%
  1775. ─────────────────┬────────────────────────┬────────────────────────────────%@NL@%
  1776.                  │ aas                    │ 88/86     8%@NL@%
  1777. %@AB@%AAS%@AE@%              │                        │   286     3%@NL@%
  1778.                  │                        │   386     4%@NL@%
  1779. ─────────────────┴────────────────────────┴────────────────────────────────%@NL@%
  1780. %@NL@%
  1781. %@NL@%
  1782. %@CR:37        @%%@NL@%
  1783. %@3@%%@AB@%ADC%@AE@%%@CR:ADC       @%%@EH@%%@QR:adc@%%@NL@%
  1784. %@AB@%Add with Carry%@AE@%%@QR:add with carry@%%@NL@%
  1785. ┌───┬───┬───┬───┬───┬───┬───┬───┬───┐%@NL@%
  1786. │ O │ D │ I │ T │ S │ Z │ A │ P │ C │%@NL@%
  1787. ├───┼───┼───┼───┼───┼───┼───┼───┼───┤%@NL@%
  1788. │ ± │   │   │   │ ± │ ± │ ± │ ± │ ± │%@NL@%
  1789. └───┴───┴───┴───┴───┴───┴───┴───┴───┘%@NL@%
  1790. %@NL@%
  1791. %@4@%Adds the source operand, the destination operand, and%@EH@%
  1792. the value of the carry flag. The result is assigned to the
  1793. destination operand. This instruction is used to add the
  1794. more significant portions of numbers that must be added
  1795. in multiple registers.%@NL@%
  1796. %@NL@%
  1797. ───────────────────────────────────────────────────────────────────────────%@NL@%
  1798. ┌───────────┐ ┌──────────────┐%@NL@%
  1799. │ 000100%@AI@%dw%@AE@%  │ │  %@AI@%mod,reg,r/m%@AE@% │     %@AI@%disp%@AE@% %@AI@%(0%@AE@% %@AI@%or%@AE@% %@AI@%2)%@AE@%%@NL@%
  1800. └───────────┘ └──────────────┘%@NL@%
  1801. ──────────────────┬───────────────────────────┬────────────────────────────%@NL@%
  1802.                   │ adc   dx,cx               │ 88/86     3%@NL@%
  1803. %@AB@%ADC  %@AI@%reg,reg%@AE@%      │                           │   286     2%@NL@%
  1804.                   │                           │   386     2%@NL@%
  1805. ──────────────────┼───────────────────────────┼────────────────────────────%@NL@%
  1806.                   │ adc   WORD PTR m32[2],dx  │ 88/86     16+EA (W88=24+EA)%@NL@%
  1807. %@AB@%ADC  %@AI@%mem,reg%@AE@%      │                           │   286     7%@NL@%
  1808.                   │                           │   386     7%@NL@%
  1809. ──────────────────┼───────────────────────────┼────────────────────────────%@NL@%
  1810.                   │ adc   dx,WORD PTR m32[2]  │ 88/86     9+EA (W88=13+EA)%@NL@%
  1811. %@AB@%ADC  %@AI@%reg,mem%@AE@%      │                           │   286     7%@NL@%
  1812.                   │                           │   386     6%@NL@%
  1813. ──────────────────┴───────────────────────────┴────────────────────────────%@NL@%
  1814. ┌───────────┐ ┌─────────────┐%@NL@%
  1815. │ 100000%@AI@%sw%@AE@%  │ │ %@AI@%mod%@AE@%,010,%@AI@%r/m%@AE@% │   %@AI@%disp%@AE@% %@AI@%(0%@AE@% %@AI@%or%@AE@% %@AI@%2)%@AE@%     %@AI@%data%@AE@% %@AI@%(1%@AE@% %@AI@%or%@AE@% %@AI@%2)%@AE@%%@NL@%
  1816. └───────────┘ └─────────────┘%@NL@%
  1817. ──────────────────┬───────────────────────────┬────────────────────────────%@NL@%
  1818.                   │ adc   dx,12               │ 88/86     4%@NL@%
  1819. %@AB@%ADC  %@AI@%reg,immed%@AE@%    │                           │   286     3%@NL@%
  1820.                   │                           │   386     2%@NL@%
  1821. ──────────────────┼───────────────────────────┼────────────────────────────%@NL@%
  1822.                   │ adc   WORD PTR m32[2],16  │ 88/86     17+EA (W88=23+EA)%@NL@%
  1823. %@AB@%ADC  %@AI@%mem,immed%@AE@%    │                           │   286     7%@NL@%
  1824.                   │                           │   386     7%@NL@%
  1825. ──────────────────┴───────────────────────────┴────────────────────────────%@NL@%
  1826. ┌───────────┐%@NL@%
  1827. │ 0001010%@AI@%w%@AE@%  │     %@AI@%data%@AE@% %@AI@%(1%@AE@% %@AI@%or%@AE@% %@AI@%2)%@AE@%%@NL@%
  1828. └───────────┘%@NL@%
  1829. ─────────────────┬────────────────────────────┬────────────────────────────%@NL@%
  1830.                  │  adc   ax,5                │ 88/86     4%@NL@%
  1831. %@AB@%ADC  %@AI@%accum,immed%@AE@% │                            │   286     3%@NL@%
  1832.                  │                            │   386     2%@NL@%
  1833. ─────────────────┴────────────────────────────┴────────────────────────────%@NL@%
  1834. %@NL@%
  1835. %@NL@%
  1836. %@CR:38        @%%@NL@%
  1837. %@3@%%@AB@%ADD%@AE@%%@CR:ADD       @%%@EH@%%@QR:add@%%@NL@%
  1838. %@AB@%Add%@AE@%%@NL@%
  1839. ┌───┬───┬───┬───┬───┬───┬───┬───┬───┐%@NL@%
  1840. │ O │ D │ I │ T │ S │ Z │ A │ P │ C │%@NL@%
  1841. ├───┼───┼───┼───┼───┼───┼───┼───┼───┤%@NL@%
  1842. │ ± │   │   │   │ ± │ ± │ ± │ ± │ ± │%@NL@%
  1843. └───┴───┴───┴───┴───┴───┴───┴───┴───┘%@NL@%
  1844. %@NL@%
  1845. %@4@%Adds the source and destination operands and puts the sum in%@EH@%
  1846. the destination operand.%@NL@%
  1847. %@NL@%
  1848. ───────────────────────────────────────────────────────────────────────────%@NL@%
  1849. ┌───────────┐ ┌─────────────┐%@NL@%
  1850. │ 000000%@AI@%dw%@AE@%  │ │ %@AI@%mod,reg,r/m%@AE@% │     %@AI@%disp%@AE@% %@AI@%(0%@AE@% %@AI@%or%@AE@% %@AI@%2)%@AE@%%@NL@%
  1851. └───────────┘ └─────────────┘%@NL@%
  1852. ──────────────────┬───────────────────────────┬────────────────────────────%@NL@%
  1853.                   │ add   ax,bx               │ 88/86     3%@NL@%
  1854. %@AB@%ADD  %@AI@%reg,reg%@AE@%      │                           │   286     2%@NL@%
  1855.                   │                           │   386     2%@NL@%
  1856. ──────────────────┼───────────────────────────┼────────────────────────────%@NL@%
  1857.                   │ add   total,cx            │ 88/86     16+EA (W88=24+EA)%@NL@%
  1858. %@AB@%ADD  %@AI@%mem,reg%@AE@%      │ add   array[bx+di],dx     │   286     7%@NL@%
  1859.                   │                           │   386     7%@NL@%
  1860. ──────────────────┼───────────────────────────┼────────────────────────────%@NL@%
  1861.                   │ add   cx,incr             │ 88/86     9+EA (W88=13+EA)%@NL@%
  1862. %@AB@%ADD  %@AI@%reg,mem%@AE@%      │ add   dx,[bp+6]           │   286     7%@NL@%
  1863.                   │                           │   386     6%@NL@%
  1864. ──────────────────┴───────────────────────────┴────────────────────────────%@NL@%
  1865. ┌───────────┐  ┌─────────────┐%@NL@%
  1866. │ 100000%@AI@%sw%@AE@%  │  │ %@AI@%mod%@AE@%,000,%@AI@%r/m%@AE@% │  %@AI@%disp%@AE@% %@AI@%(0%@AE@% %@AI@%or%@AE@% %@AI@%2)%@AE@%     %@AI@%data%@AE@% %@AI@%(1%@AE@% %@AI@%or%@AE@% %@AI@%2)%@AE@%%@NL@%
  1867. └───────────┘  └─────────────┘%@NL@%
  1868. ──────────────────┬───────────────────────────┬────────────────────────────%@NL@%
  1869.                   │ add   bx,6                │ 88/86     4%@NL@%
  1870. %@AB@%ADD  %@AI@%reg,immed%@AE@%    │                           │   286     3%@NL@%
  1871.                   │                           │   386     2%@NL@%
  1872. ──────────────────┼───────────────────────────┼────────────────────────────%@NL@%
  1873.                   │ add   amount,27           │ 88/86     17+EA (W88=23+EA)%@NL@%
  1874. %@AB@%ADD  %@AI@%mem,immed%@AE@%    │ add   pointers[bx][si],6  │   286     7%@NL@%
  1875.                   │                           │   386     7%@NL@%
  1876. ──────────────────┴───────────────────────────┴────────────────────────────%@NL@%
  1877. ┌───────────┐%@NL@%
  1878. │ 0000010%@AI@%w%@AE@%  │     %@AI@%data%@AE@% %@AI@%(1%@AE@% %@AI@%or%@AE@% %@AI@%2)%@AE@%%@NL@%
  1879. └───────────┘%@NL@%
  1880. ──────────────────┬───────────────────────────┬────────────────────────────%@NL@%
  1881.                   │ add   ax,10               │ 88/86     4%@NL@%
  1882. %@AB@%ADD  %@AI@%accum,immed%@AE@%  │                           │   286     3%@NL@%
  1883.                   │                           │   386     2%@NL@%
  1884. ──────────────────┴───────────────────────────┴────────────────────────────%@NL@%
  1885. %@NL@%
  1886. %@NL@%
  1887. %@CR:39        @%%@NL@%
  1888. %@3@%%@AB@%AND%@AE@%%@CR:AND       @%%@EH@%%@QR:and@%%@NL@%
  1889. %@AB@%Logical AND%@AE@%%@QR:logical and@%%@NL@%
  1890. ┌───┬───┬───┬───┬───┬───┬───┬───┬───┐%@NL@%
  1891. │ O │ D │ I │ T │ S │ Z │ A │ P │ C │%@NL@%
  1892. ├───┼───┼───┼───┼───┼───┼───┼───┼───┤%@NL@%
  1893. │ 0 │   │   │   │ ± │ ± │ ? │ ± │ 0 │%@NL@%
  1894. └───┴───┴───┴───┴───┴───┴───┴───┴───┘%@NL@%
  1895. %@NL@%
  1896. %@4@%Performs a bitwise logical AND on the source and destination%@EH@%
  1897. operands and stores the result in the destination operand.
  1898. For each bit position in the operands, if both bits are set,
  1899. then the corresponding bit of the result is set. Otherwise,
  1900. the corresponding bit of the result is cleared.%@NL@%
  1901. %@NL@%
  1902. ───────────────────────────────────────────────────────────────────────────%@NL@%
  1903. ┌───────────┐  ┌─────────────┐%@NL@%
  1904. │ 001000%@AI@%dw%@AE@%  │  │ %@AI@%mod,reg,r/m%@AE@% │     %@AI@%disp%@AE@% %@AI@%(0%@AE@% %@AI@%or%@AE@% %@AI@%2)%@AE@%%@NL@%
  1905. └───────────┘  └─────────────┘%@NL@%
  1906. ──────────────────┬─────────────────────────┬──────────────────────────────%@NL@%
  1907.                   │ and   dx,bx             │ 88/86     3%@NL@%
  1908. %@AB@%AND  %@AI@%reg,reg%@AE@%      │                         │   286     2%@NL@%
  1909.                   │                         │   386     2%@NL@%
  1910. ──────────────────┼─────────────────────────┼──────────────────────────────%@NL@%
  1911.                   │ and   bitmask,bx        │ 88/86     16+EA (W88=24+EA)%@NL@%
  1912. %@AB@%AND  %@AI@%mem,reg%@AE@%      │ and   [bp+2],dx         │   286     7%@NL@%
  1913.                   │                         │   386     7%@NL@%
  1914. ──────────────────┼─────────────────────────┼──────────────────────────────%@NL@%
  1915.                   │ and   bx,masker         │ 88/86     9+EA (W88=13+EA)%@NL@%
  1916. %@AB@%AND  %@AI@%reg,mem%@AE@%      │ and   dx,marray[bx+di]  │   286     7%@NL@%
  1917.                   │                         │   386     6%@NL@%
  1918. ──────────────────┴─────────────────────────┴──────────────────────────────%@NL@%
  1919. ┌───────────┐  ┌─────────────┐%@NL@%
  1920. │ 100000%@AI@%sw%@AE@%  │  │ %@AI@%mod%@AE@%,100,%@AI@%r/m%@AE@% │     %@AI@%disp%@AE@% %@AI@%(0%@AE@% %@AI@%or%@AE@% %@AI@%2)%@AE@%     %@AI@%data%@AE@% %@AI@%(1%@AE@% %@AI@%or%@AE@% %@AI@%2)%@AE@%%@NL@%
  1921. └───────────┘  └─────────────┘%@NL@%
  1922. ──────────────────┬─────────────────────────┬──────────────────────────────%@NL@%
  1923.                   │ and   dx,0F7h           │ 88/86     4%@NL@%
  1924. %@AB@%AND  %@AI@%reg,immed%@AE@%    │                         │   286     3%@NL@%
  1925.                   │                         │   386     2%@NL@%
  1926. ──────────────────┼─────────────────────────┼──────────────────────────────%@NL@%
  1927.                   │ and   masker,1001b      │ 88/86     17+EA (W88=23+EA)%@NL@%
  1928. %@AB@%AND  %@AI@%mem,immed%@AE@%    │                         │   286     7%@NL@%
  1929.                   │                         │   386     7%@NL@%
  1930. ──────────────────┴─────────────────────────┴──────────────────────────────%@NL@%
  1931. ┌───────────┐%@NL@%
  1932. │ 0010010%@AI@%w%@AE@%  │     %@AI@%data%@AE@% %@AI@%(1%@AE@% %@AI@%or%@AE@% %@AI@%2)%@AE@%%@NL@%
  1933. └───────────┘%@NL@%
  1934. ──────────────────┬─────────────────────────┬──────────────────────────────%@NL@%
  1935.                   │ and   ax,0B6h           │ 88/86     4%@NL@%
  1936. %@AB@%AND  %@AI@%accum,immed%@AE@%  │                         │   286     3%@NL@%
  1937.                   │                         │   386     2%@NL@%
  1938. ──────────────────┴─────────────────────────┴──────────────────────────────%@NL@%
  1939. %@NL@%
  1940. %@NL@%
  1941. %@CR:40        @%%@NL@%
  1942. %@3@%%@AB@%ARPL%@AE@%%@CR:ARPL      @%%@EH@%%@QR:arpl@%%@NL@%
  1943. %@AB@%Adjust Requested Privilege Level%@AE@%%@NL@%
  1944. %@AB@%80286/386 Protected Only%@AE@%%@NL@%
  1945. ┌───┬───┬───┬───┬───┬───┬───┬───┬───┐%@NL@%
  1946. │ O │ D │ I │ T │ S │ Z │ A │ P │ C │%@NL@%
  1947. ├───┼───┼───┼───┼───┼───┼───┼───┼───┤%@NL@%
  1948. │   │   │   │   │   │ ± │   │   │   │%@NL@%
  1949. └───┴───┴───┴───┴───┴───┴───┴───┴───┘%@NL@%
  1950. %@NL@%
  1951. %@4@%Verifies that the destination Requested Privileged Level%@EH@%
  1952. (RPL) field (bits 0 and 1 of a selector value) is less
  1953. than the source RPL field. If it is not, %@AB@%ARPL%@AE@% adjusts the
  1954. destination RPL up to match the source RPL. The destination
  1955. operand should be a 16-bit memory or register operand
  1956. containing the value of a selector. The source operand
  1957. should be a 16-bit register containing the test value. The
  1958. zero flag is set if the destination is adjusted; otherwise
  1959. the flag is cleared. %@AB@%ARPL%@AE@% can only be used in 80286 and
  1960. 80386 privileged mode. See Intel documentation for details
  1961. on selectors and privilege levels.%@NL@%
  1962. %@NL@%
  1963. ───────────────────────────────────────────────────────────────────────────%@NL@%
  1964. ┌───────────┐  ┌─────────────┐%@NL@%
  1965. │ 01100011  │  │ %@AI@%mod,reg,r/m%@AE@% │     %@AI@%disp%@AE@% %@AI@%(0%@AE@% %@AI@%or%@AE@% %@AI@%2)%@AE@%%@NL@%
  1966. └───────────┘  └─────────────┘%@NL@%
  1967. ────────────────┬─────────────────────────┬────────────────────────────────%@NL@%
  1968.                 │ arpl  ax,cx             │ 88/86     ─%@NL@%
  1969. %@AB@%ARPL  %@AI@%reg,reg%@AE@%   │                         │   286     10%@NL@%
  1970.                 │                         │   386     20%@NL@%
  1971. ────────────────┼─────────────────────────┼────────────────────────────────%@NL@%
  1972.                 │ arpl  selector,dx       │ 88/86     ─%@NL@%
  1973. %@AB@%ARPL  %@AI@%mem,reg%@AE@%   │                         │   286     11%@NL@%
  1974.                 │                         │   386     21%@NL@%
  1975. ────────────────┴─────────────────────────┴────────────────────────────────%@NL@%
  1976. %@NL@%
  1977. %@NL@%
  1978. %@CR:41        @%%@NL@%
  1979. %@3@%%@AB@%BOUND%@AE@%%@CR:BOUND     @%%@EH@%%@QR:bound@%%@NL@%
  1980. %@AB@%Check Array Bounds%@AE@%%@QR:check array bounds@%%@QR:check bounds@%%@NL@%
  1981. %@AB@%80186/286/386 Only%@AE@%%@NL@%
  1982. ┌───┬───┬───┬───┬───┬───┬───┬───┬───┐%@NL@%
  1983. │ O │ D │ I │ T │ S │ Z │ A │ P │ C │%@NL@%
  1984. ├───┼───┼───┼───┼───┼───┼───┼───┼───┤%@NL@%
  1985. │   │   │   │   │   │   │   │   │   │%@NL@%
  1986. └───┴───┴───┴───┴───┴───┴───┴───┴───┘%@NL@%
  1987. %@NL@%
  1988. %@4@%Verifies that a signed index value is within the bounds of%@EH@%
  1989. an array. The destination operand can be any 16-bit register
  1990. containing the index to be checked. The source operand must
  1991. then be a 32-bit memory operand in which the low and high
  1992. words contain the starting and ending values, respectively,
  1993. of the array. (On the 80386 processor, the destination
  1994. operand can be a 32-bit register; in this case, the source
  1995. operand must be a 64-bit operand made up of 32-bit bounds.)
  1996. If the source operand is less than the first bound or
  1997. greater than the last bound, then an Interrupt 5 is
  1998. generated. The instruction pointer pushed by the interrupt
  1999. (and returned by %@AB@%IRET%@AE@%) points to the %@AB@%BOUND%@AE@% instruction
  2000. rather than to the next instruction.%@NL@%
  2001. %@NL@%
  2002. ───────────────────────────────────────────────────────────────────────────%@NL@%
  2003. ┌───────────┐  ┌─────────────┐%@NL@%
  2004. │ 01100010  │  │ %@AI@%mod,reg,r/m%@AE@% │     %@AI@%disp%@AE@% %@AI@%(2)%@AE@%%@NL@%
  2005. └───────────┘  └─────────────┘%@NL@%
  2006. ──────────────────────┬─────────────────────┬──────────────────────────────%@NL@%
  2007. %@AB@%BOUND  %@AI@%reg16,mem32%@AE@%    │ bound di,base-4     │ 88/86     ─%@NL@%
  2008. %@AB@%BOUND  %@AI@%reg32,mem64%@AE@%%@FN@%
  2009. %@FC@%1. 80386 only.
  2010. %@FC@%2. See %@AB@%INT%@AE@% for timings if interrupt 5 is called.%@EF@%1  │                     │   286     noj=13%@FN@%
  2011. %@FC@%1. 80386 only.
  2012. %@FC@%2. See %@AB@%INT%@AE@% for timings if interrupt 5 is called.%@EF@%2%@NL@%
  2013.                       │                     │   386     noj=10%@FN@%
  2014. %@FC@%2. See %@AB@%INT%@AE@% for timings if interrupt 5 is called.%@EF@%2%@NL@%
  2015. ──────────────────────┴─────────────────────┴──────────────────────────────%@NL@%
  2016. %@NL@%
  2017. %@NL@%
  2018. %@CR:42        @%%@NL@%
  2019. %@3@%%@AB@%BSF/BSR%@AE@%%@CR:BSF       @%%@EH@%%@QR:bsf@%%@QR:bsr@%%@NL@%
  2020. %@AB@%Bit Scan%@AE@%%@QR:bit scan@%%@NL@%
  2021. %@AB@%80386 Only%@AE@%%@NL@%
  2022. ┌───┬───┬───┬───┬───┬───┬───┬───┬───┐%@NL@%
  2023. │ O │ D │ I │ T │ S │ Z │ A │ P │ C │%@NL@%
  2024. ├───┼───┼───┼───┼───┼───┼───┼───┼───┤%@NL@%
  2025. │   │   │   │   │   │ ± │   │   │   │%@NL@%
  2026. └───┴───┴───┴───┴───┴───┴───┴───┴───┘%@NL@%
  2027. %@NL@%
  2028. %@4@%Scans an operand to find the first set bit. If a set bit is%@EH@%
  2029. found, the zero flag is set and the destination operand is
  2030. loaded with the bit index of the first set bit encountered.
  2031. If no set bit is found, the zero flag is cleared. %@AB@%BSF%@AE@% (Bit
  2032. Scan Forward) scans from bit 0 to the most significant bit.
  2033. %@AB@%BSR%@AE@% (Bit Scan Reverse) scans from the most significant
  2034. bit of an operand to bit 0.%@NL@%
  2035. %@NL@%
  2036. ───────────────────────────────────────────────────────────────────────────%@NL@%
  2037. ┌───────────┐  ┌───────────┐  ┌─────────────┐%@NL@%
  2038. │ 00001111  │  │ 10111100  │  │ %@AI@%mod,reg,r/m%@AE@% │     %@AI@%disp%@AE@% %@AI@%(0,%@AE@% %@AI@%2,%@AE@% %@AI@%or%@AE@% %@AI@%4)%@AE@%%@NL@%
  2039. └───────────┘  └───────────┘  └─────────────┘%@NL@%
  2040. ──────────────────┬─────────────────────────┬──────────────────────────────%@NL@%
  2041. %@AB@%BSF  %@AI@%reg16,reg16%@AE@%  │ bsf   cx,bx             │ 88/86     ─%@NL@%
  2042. %@AB@%BSF  %@AI@%reg32,reg32%@AE@%  │                         │   286     ─%@NL@%
  2043.                   │                         │   386     10+3n%@NL@%
  2044. ──────────────────┼─────────────────────────┼──────────────────────────────%@NL@%
  2045. %@AB@%BSF  %@AI@%reg16,mem16%@AE@%  │ bsf   ecx,bitmask       │ 88/86     ─%@NL@%
  2046. %@AB@%BSF  %@AI@%reg32,mem32%@AE@%  │                         │   286     ─%@NL@%
  2047.                   │                         │   386     10+3n%@NL@%
  2048. ──────────────────┴─────────────────────────┴──────────────────────────────%@NL@%
  2049. ┌───────────┐  ┌───────────┐  ┌─────────────┐%@NL@%
  2050. │ 00001111  │  │ 10111101  │  │ %@AI@%mod,reg,r/m%@AE@% │     %@AI@%disp%@AE@% %@AI@%(0,%@AE@% %@AI@%2,%@AE@% %@AI@%or%@AE@% %@AI@%4)%@AE@%%@NL@%
  2051. └───────────┘  └───────────┘  └─────────────┘%@NL@%
  2052. ──────────────────┬─────────────────────────┬──────────────────────────────%@NL@%
  2053. %@AB@%BSR  %@AI@%reg16,reg16%@AE@%  │  bsr   cx,dx            │  88/86     ─%@NL@%
  2054. %@AB@%BSR  %@AI@%reg32,reg32%@AE@%  │                         │    286     -%@NL@%
  2055.                   │                         │    386     10+3n%@NL@%
  2056. ──────────────────┼─────────────────────────┼──────────────────────────────%@NL@%
  2057. %@AB@%BSR  %@AI@%reg16,mem16%@AE@%  │  bsr   eax,bitmask      │  88/86     ─%@NL@%
  2058. %@AB@%BSR  %@AI@%reg32,mem32%@AE@%  │                         │    286     ─%@NL@%
  2059.                   │                         │    386     10+3n%@NL@%
  2060. ──────────────────┴─────────────────────────┴──────────────────────────────%@NL@%
  2061. %@NL@%
  2062. %@NL@%
  2063. %@CR:43        @%%@NL@%
  2064. %@3@%%@AB@%BT/BTC/BTR/BTS%@AE@%%@CR:BT        @%%@EH@%%@QR:bt@%%@QR:btc@%%@QR:bts@%%@NL@%
  2065. %@AB@%Bit Tests%@AE@%%@QR:bit tests@%%@QR:bit test@%%@NL@%
  2066. %@AB@%80386 Only%@AE@%%@NL@%
  2067. ┌───┬───┬───┬───┬───┬───┬───┬───┬───┐%@NL@%
  2068. │ O │ D │ I │ T │ S │ Z │ A │ P │ C │%@NL@%
  2069. ├───┼───┼───┼───┼───┼───┼───┼───┼───┤%@NL@%
  2070. │   │   │   │   │   │   │   │   │ ± │%@NL@%
  2071. └───┴───┴───┴───┴───┴───┴───┴───┴───┘%@NL@%
  2072. %@NL@%
  2073. %@4@%Copies the value of a specified bit into the carry flag%@EH@%
  2074. where it can be tested by a %@AB@%JC%@AE@% or %@AB@%JNC%@AE@% instruction. The
  2075. destination operand specifies the value in which the bit is
  2076. located; the source operand specifies the bit position. %@AB@%BT%@AE@%
  2077. simply copies the bit to the flag. %@AB@%BTC%@AE@% copies the bit and
  2078. complements (toggles) it in the destination. %@AB@%BTR%@AE@% copies the
  2079. bit and resets (clears) it in the destination. %@AB@%BTS%@AE@% copies
  2080. the bit and sets it in the destination.%@NL@%
  2081. %@NL@%
  2082. ───────────────────────────────────────────────────────────────────────────%@NL@%
  2083. ┌───────────┐ ┌───────────┐ ┌───────────────┐%@NL@%
  2084. │ 00001111  │ │ 10111010  │ │ %@AI@%mod,BBB%@AE@%%@FN@%
  2085. %@FC@%1. %@AI@%BBB%@AE@% is 100 for %@AB@%BT%@AE@%, 111 for %@AB@%BTC%@AE@%, 110 for %@AB@%BTR%@AE@%, and 101 for %@AB@%BTS%@AE@%.%@EF@%1%@AI@%,r/m%@AE@% │  %@AI@%disp%@AE@% %@AI@%(0,%@AE@% %@AI@%2,%@AE@% %@AI@%or%@AE@% %@AI@%4)%@AE@%   %@AI@%data%@AE@% %@AI@%(1)%@AE@%%@NL@%
  2086. └───────────┘ └───────────┘ └───────────────┘%@NL@%
  2087. ───────────────────┬─────────────────────────┬─────────────────────────────%@NL@%
  2088.                    │ bt  ax,4                │ 88/86     ─%@NL@%
  2089. %@AB@%BT  %@AI@%reg16,immed8%@AE@%%@FN@%
  2090. %@FC@%2. Operands can also be 32 bits (%@AI@%reg32%@AE@% and %@AI@%mem32%@AE@%).%@EF@%2 │                         │   286     ─%@NL@%
  2091.                    │                         │   386     3%@NL@%
  2092. ───────────────────┼─────────────────────────┼─────────────────────────────%@NL@%
  2093. %@AB@%BTC  %@AI@%reg16,immed8%@AE@%%@FN@%
  2094. %@FC@%2. Operands can also be 32 bits (%@AI@%reg32%@AE@% and %@AI@%mem32%@AE@%).%@EF@%2│ bts  ax,4               │ 88/86     ─%@NL@%
  2095. %@AB@%BTR  %@AI@%reg16,immed8%@AE@%%@FN@%
  2096. %@FC@%2. Operands can also be 32 bits (%@AI@%reg32%@AE@% and %@AI@%mem32%@AE@%).%@EF@%2│ btr  bx,17              │   286     ─%@NL@%
  2097. %@AB@%BTS  %@AI@%reg16,immed8%@AE@%%@FN@%
  2098. %@FC@%2. Operands can also be 32 bits (%@AI@%reg32%@AE@% and %@AI@%mem32%@AE@%).%@EF@%2│ btc  edi,4              │   386     6%@NL@%
  2099. ───────────────────┼─────────────────────────┼─────────────────────────────%@NL@%
  2100.                    │ btr  DWORD PTR [si],27  │ 88/86     ─%@NL@%
  2101. %@AB@%BT  %@AI@%mem16,immed8%@AE@%%@FN@%
  2102. %@FC@%2. Operands can also be 32 bits (%@AI@%reg32%@AE@% and %@AI@%mem32%@AE@%).%@EF@%2 │ btc  color[di],4        │   286     ─%@NL@%
  2103.                    │                         │   386     6%@NL@%
  2104. ───────────────────┼─────────────────────────┼─────────────────────────────%@NL@%
  2105. %@AB@%BTC  %@AI@%mem16,immed8%@AE@%%@FN@%
  2106. %@FC@%2. Operands can also be 32 bits (%@AI@%reg32%@AE@% and %@AI@%mem32%@AE@%).%@EF@%2│ btc  DWORD PTR [bx],27  │ 88/86     ─%@NL@%
  2107. %@AB@%BTR  %@AI@%mem16,immed8%@AE@%%@FN@%
  2108. %@FC@%2. Operands can also be 32 bits (%@AI@%reg32%@AE@% and %@AI@%mem32%@AE@%).%@EF@%2│ btc  maskit,4           │   286     ─%@NL@%
  2109. %@AB@%BTS  %@AI@%mem16,immed8%@AE@%%@FN@%
  2110. %@FC@%2. Operands can also be 32 bits (%@AI@%reg32%@AE@% and %@AI@%mem32%@AE@%).%@EF@%2│ btr  color[di],4        │   386     8%@NL@%
  2111. ───────────────────┴─────────────────────────┴─────────────────────────────%@NL@%
  2112. ┌───────────┐ ┌───────────────┐ ┌─────────────┐%@NL@%
  2113. │ 00001111  │ │ 10%@AI@%BBB%@AE@%011%@FN@%
  2114. %@FC@%1. %@AI@%BBB%@AE@% is 100 for %@AB@%BT%@AE@%, 111 for %@AB@%BTC%@AE@%, 110 for %@AB@%BTR%@AE@%, and 101 for %@AB@%BTS%@AE@%.%@EF@%1    │ │ %@AI@%mod,reg,r/m%@AE@% │   %@AI@%disp%@AE@% %@AI@%(0,%@AE@% %@AI@%2,%@AE@% %@AI@%or%@AE@% %@AI@%4)%@AE@%%@NL@%
  2115. └───────────┘ └───────────────┘ └─────────────┘%@NL@%
  2116. ───────────────────┬───────────────────────────┬───────────────────────────%@NL@%
  2117.                    │ bt    ax,bx               │ 88/86     ─%@NL@%
  2118. %@AB@%BT  %@AI@%reg16%@AE@%,%@AI@%reg16%@AE@%%@FN@%
  2119. %@FC@%2. Operands can also be 32 bits (%@AI@%reg32%@AE@% and %@AI@%mem32%@AE@%).%@EF@%2  │                           │   286     ─%@NL@%
  2120.                    │                           │   386     3%@NL@%
  2121. ───────────────────┼───────────────────────────┼───────────────────────────%@NL@%
  2122. %@AB@%BTC  %@AI@%reg16%@AE@%,%@AI@%reg16%@AE@%%@FN@%
  2123. %@FC@%2. Operands can also be 32 bits (%@AI@%reg32%@AE@% and %@AI@%mem32%@AE@%).%@EF@%2 │ btc   eax,ebx             │ 88/86     ─%@NL@%
  2124. %@AB@%BTR  %@AI@%reg16%@AE@%,%@AI@%reg16%@AE@%%@FN@%
  2125. %@FC@%2. Operands can also be 32 bits (%@AI@%reg32%@AE@% and %@AI@%mem32%@AE@%).%@EF@%2 │ bts   bx,ax               │   286     ─%@NL@%
  2126. %@AB@%BTS  %@AI@%reg16%@AE@%,%@AI@%reg16%@AE@%%@FN@%
  2127. %@FC@%2. Operands can also be 32 bits (%@AI@%reg32%@AE@% and %@AI@%mem32%@AE@%).%@EF@%2 │ btr   cx,di               │   386     6%@NL@%
  2128. ───────────────────┼───────────────────────────┬───────────────────────────%@NL@%
  2129.                    │ bt    [bx],dx             │ 88/86     ─%@NL@%
  2130. %@AB@%BT  %@AI@%mem16%@AE@%,%@AI@%reg16%@AE@%%@FN@%
  2131. %@FC@%2. Operands can also be 32 bits (%@AI@%reg32%@AE@% and %@AI@%mem32%@AE@%).%@EF@%2  │                           │   286     ─%@NL@%
  2132.                    │                           │   386     12%@NL@%
  2133. ───────────────────┼───────────────────────────┼───────────────────────────%@NL@%
  2134. %@AB@%BTC  %@AI@%mem16%@AE@%,%@AI@%reg16%@AE@%%@FN@%
  2135. %@FC@%2. Operands can also be 32 bits (%@AI@%reg32%@AE@% and %@AI@%mem32%@AE@%).%@EF@%2 │ bts   flags[bx],cx        │ 88/86     ─%@NL@%
  2136. %@AB@%BTR  %@AI@%mem16%@AE@%,%@AI@%reg16%@AE@%%@FN@%
  2137. %@FC@%2. Operands can also be 32 bits (%@AI@%reg32%@AE@% and %@AI@%mem32%@AE@%).%@EF@%2 │ btr   rotate,cx           │   286     ─%@NL@%
  2138. %@AB@%BTS  %@AI@%mem16%@AE@%,%@AI@%reg16%@AE@%%@FN@%
  2139. %@FC@%2. Operands can also be 32 bits (%@AI@%reg32%@AE@% and %@AI@%mem32%@AE@%).%@EF@%2 │ btc   [bp+8],si           │   386     13%@NL@%
  2140. ───────────────────┴───────────────────────────┴───────────────────────────%@NL@%
  2141. %@NL@%
  2142. %@NL@%
  2143. %@CR:44        @%%@NL@%
  2144. %@3@%%@AB@%CALL%@AE@%%@CR:CALL      @%%@EH@%%@QR:call@%%@NL@%
  2145. %@AB@%Call Procedure%@AE@%%@QR:call procedure@%%@NL@%
  2146. ┌───┬───┬───┬───┬───┬───┬───┬───┬───┐%@NL@%
  2147. │ O │ D │ I │ T │ S │ Z │ A │ P │ C │%@NL@%
  2148. ├───┼───┼───┼───┼───┼───┼───┼───┼───┤%@NL@%
  2149. │   │   │   │   │   │   │   │   │   │%@NL@%
  2150. └───┴───┴───┴───┴───┴───┴───┴───┴───┘%@NL@%
  2151. %@NL@%
  2152. %@4@%Calls a procedure. The instruction does this by pushing%@EH@%
  2153. the address of the next instruction onto the stack and
  2154. transferring to the address specified by the operand. For
  2155. %@AB@%NEAR%@AE@% calls, %@AB@%SP%@AE@% is decreased by 2, the offset (%@AB@%IP%@AE@%) is pushed,
  2156. and the new offset is loaded into %@AB@%IP%@AE@%.%@NL@%
  2157. %@NL@%
  2158. %@4@%For %@AB@%FAR%@AE@% calls, %@AB@%SP%@AE@% is decreased by 2, the segment (%@AB@%CS%@AE@%) is%@EH@%
  2159. pushed, and the new segment is loaded into %@AB@%CS%@AE@%. Then %@AB@%SP%@AE@% is
  2160. decreased by 2 again, the offset (%@AB@%IP%@AE@%) is pushed, and the new
  2161. offset is loaded into %@AB@%IP%@AE@%. A subsequent %@AB@%RET%@AE@% instruction can
  2162. pop the address so that execution continues with the
  2163. instruction following the call.%@NL@%
  2164. %@NL@%
  2165. ───────────────────────────────────────────────────────────────────────────%@NL@%
  2166. ┌───────────┐%@NL@%
  2167. │ 11101000  │     %@AI@%disp%@AE@% %@AI@%(2)%@AE@%%@NL@%
  2168. └───────────┘%@NL@%
  2169. ────────────────┬─────────────────────────┬────────────────────────────────%@NL@%
  2170.                 │ call  upcase            │ 88/86     19 (88=23)%@NL@%
  2171. %@AB@%CALL  %@AI@%label%@AE@%     │                         │   286     7+m%@NL@%
  2172.                 │                         │   386     7+m%@NL@%
  2173. ────────────────┴─────────────────────────┴────────────────────────────────%@NL@%
  2174. ┌───────────┐%@NL@%
  2175. │ 10011010  │     %@AI@%disp%@AE@% %@AI@%(4)%@AE@%%@NL@%
  2176. └───────────┘%@NL@%
  2177. ────────────────┬─────────────────────────┬────────────────────────────────%@NL@%
  2178.                 │ call  FAR PTR job       │ 88/86     28 (88=36)%@NL@%
  2179. %@AB@%CALL  %@AI@%label%@AE@%     │ call  distant           │   286     13+m,pm=26+m%@FN@%
  2180. %@FC@%1. Timings for calls through call and task gates are not shown, since they
  2181. %@FC@%are used primarily in operating systems.%@EF@%1%@NL@%
  2182.                 │                         │   386     17+m,pm=34+m%@FN@%
  2183. %@FC@%1. Timings for calls through call and task gates are not shown, since they
  2184. %@FC@%are used primarily in operating systems.%@EF@%1%@NL@%
  2185. ────────────────┴─────────────────────────┴────────────────────────────────%@NL@%
  2186. ┌───────────┐ ┌─────────────┐%@NL@%
  2187. │ 11111111  │ │ %@AI@%mod%@AE@%,010,%@AI@%r/m%@AE@% │%@NL@%
  2188. └───────────┘ └─────────────┘%@NL@%
  2189. ────────────────┬─────────────────────────┬────────────────────────────────%@NL@%
  2190.                 │ call  ax                │ 88/86     16 (88=20)%@NL@%
  2191. %@AB@%CALL  %@AI@%reg%@AE@%       │                         │   286     7+m%@NL@%
  2192.                 │                         │   386     7+m%@NL@%
  2193. ────────────────┼─────────────────────────┼────────────────────────────────%@NL@%
  2194. %@AB@%CALL  %@AI@%mem16%@AE@%     │ call  pointer           │ 88/86     21+EA (88=29+EA)%@NL@%
  2195. %@AB@%CALL  %@AI@%mem32%@AE@%%@FN@%
  2196. %@FC@%2. 80386 32-bit addressing mode only.%@EF@%2   │ call  [bx]              │   286     11+m%@NL@%
  2197.                 │                         │   386     10+m%@NL@%
  2198. ────────────────┴─────────────────────────┴────────────────────────────────%@NL@%
  2199. ┌───────────┐ ┌─────────────┐%@NL@%
  2200. │ 11111111  │ │ %@AI@%mod%@AE@%,011,%@AI@%r/m%@AE@% │%@NL@%
  2201. └───────────┘ └─────────────┘%@NL@%
  2202. ────────────────┬─────────────────────────┬────────────────────────────────%@NL@%
  2203. %@AB@%CALL  %@AI@%mem32%@AE@%     │ call  far_table[di]     │ 88/86     37+EA (88=53+EA)%@NL@%
  2204. %@AB@%CALL  %@AI@%mem48%@AE@%%@FN@%
  2205. %@FC@%1. Timings for calls through call and task gates are not shown, since they
  2206. %@FC@%are used primarily in operating systems.
  2207. %@FC@%2. 80386 32-bit addressing mode only.%@EF@%2   │ call  DWORD PTR [bx]    │   286     16+m,pm=29+m%@FN@%
  2208. %@FC@%1. Timings for calls through call and task gates are not shown, since they
  2209. %@FC@%are used primarily in operating systems.
  2210. %@FC@%2. 80386 32-bit addressing mode only.%@EF@%1%@NL@%
  2211.                 │                         │   386     22+m,pm=38+m%@FN@%
  2212. %@FC@%1. Timings for calls through call and task gates are not shown, since they
  2213. %@FC@%are used primarily in operating systems.%@EF@%1%@NL@%
  2214. ────────────────┴─────────────────────────┴────────────────────────────────%@NL@%
  2215. %@NL@%
  2216. %@NL@%
  2217. %@CR:45        @%%@NL@%
  2218. %@3@%%@AB@%CBW%@AE@%%@CR:CBW       @%%@EH@%%@QR:cbw@%%@NL@%
  2219. %@AB@%Convert Byte to Word%@AE@%%@QR:convert byte to word@%%@QR:byte to word@%%@NL@%
  2220. ┌───┬───┬───┬───┬───┬───┬───┬───┬───┐%@NL@%
  2221. │ O │ D │ I │ T │ S │ Z │ A │ P │ C │%@NL@%
  2222. ├───┼───┼───┼───┼───┼───┼───┼───┼───┤%@NL@%
  2223. │   │   │   │   │   │   │   │   │   │%@NL@%
  2224. └───┴───┴───┴───┴───┴───┴───┴───┴───┘%@NL@%
  2225. %@NL@%
  2226. %@4@%Converts a signed byte in %@AB@%AL%@AE@% to a signed word in %@AB@%AX%@AE@% by%@EH@%
  2227. extending the sign bit of %@AB@%AL%@AE@% into all bits of %@AB@%AH%@AE@%.%@NL@%
  2228. %@NL@%
  2229. ───────────────────────────────────────────────────────────────────────────%@NL@%
  2230. ┌────────────┐%@NL@%
  2231. │ 10011000%@FN@%
  2232. %@FC@%1. %@AB@%CBW%@AE@% and %@AB@%CWDE%@AE@% have the same encoding except that
  2233. %@FC@%in 32-bit mode %@AB@%CBW%@AE@% is preceded by the operand-size byte (66h)
  2234. %@FC@%but %@AB@%CWDE%@AE@% is not; in 16-bit mode %@AB@%CWDE%@AE@% is preceded by
  2235. %@FC@%the operand-size byte but %@AB@%CBW%@AE@% is not.%@EF@%1 │%@NL@%
  2236. └────────────┘%@NL@%
  2237. ────────────────┬─────────────────────────┬────────────────────────────────%@NL@%
  2238.                 │ cbw                     │ 88/86     2%@NL@%
  2239. %@AB@%CBW%@AE@%             │                         │   286     2%@NL@%
  2240.                 │                         │   386     3%@NL@%
  2241. ────────────────┴─────────────────────────┴────────────────────────────────%@NL@%
  2242. %@NL@%
  2243. %@NL@%
  2244. %@NL@%
  2245. %@3@%%@AB@%CDQ%@AE@%%@CR:CDQ       @%%@EH@%%@QR:cdq@%%@NL@%
  2246. %@AB@%Convert Double to Quad%@AE@%%@QR:convert double to quad@%%@QR:double to quad@%%@NL@%
  2247. %@AB@%80386 Only%@AE@%%@NL@%
  2248. ┌───┬───┬───┬───┬───┬───┬───┬───┬───┐%@NL@%
  2249. │ O │ D │ I │ T │ S │ Z │ A │ P │ C │%@NL@%
  2250. ├───┼───┼───┼───┼───┼───┼───┼───┼───┤%@NL@%
  2251. │   │   │   │   │   │   │   │   │ 0 │%@NL@%
  2252. └───┴───┴───┴───┴───┴───┴───┴───┴───┘%@NL@%
  2253. %@NL@%
  2254. %@4@%Converts the signed doubleword in %@AB@%EAX%@AE@% to a signed quadword%@EH@%
  2255. in the %@AB@%EDX%@AE@%:%@AB@%EAX%@AE@% register pair by extending the sign bit of
  2256. %@AB@%EAX%@AE@% into all bits of %@AB@%EDX%@AE@%.%@NL@%
  2257. %@NL@%
  2258. ───────────────────────────────────────────────────────────────────────────%@NL@%
  2259. ┌────────────┐%@NL@%
  2260. │ 10011001%@FN@%
  2261. %@FC@%1. %@AB@%CWD%@AE@% and %@AB@%CDQ%@AE@% have the same encoding except that
  2262. %@FC@%in 32-bit mode %@AB@%CWD%@AE@% is preceded by the operand-size byte (66h)
  2263. %@FC@%but %@AB@%CDQ%@AE@% is not; in 16-bit mode %@AB@%CDQ%@AE@% is preceded
  2264. %@FC@%by the operand-size byte but %@AB@%CWD%@AE@% is not.%@EF@%1 │%@NL@%
  2265. └────────────┘%@NL@%
  2266. ────────────────┬─────────────────────────┬────────────────────────────────%@NL@%
  2267.                 │ cdq                     │ 88/86     ─%@NL@%
  2268. %@AB@%CDQ%@AE@%             │                         │   286     ─%@NL@%
  2269.                 │                         │   386     2%@NL@%
  2270. ────────────────┴─────────────────────────┴────────────────────────────────%@NL@%
  2271. %@NL@%
  2272. %@NL@%
  2273. %@CR:46        @%%@NL@%
  2274. %@3@%%@AB@%CLC%@AE@%%@CR:CLC       @%%@EH@%%@QR:clc@%%@NL@%
  2275. %@AB@%Clear Carry Flag%@AE@%%@QR:clear carry flag@%%@QR:clear carry@%%@NL@%
  2276. ┌───┬───┬───┬───┬───┬───┬───┬───┬───┐%@NL@%
  2277. │ O │ D │ I │ T │ S │ Z │ A │ P │ C │%@NL@%
  2278. ├───┼───┼───┼───┼───┼───┼───┼───┼───┤%@NL@%
  2279. │   │   │   │   │   │   │   │   │ 0 │%@NL@%
  2280. └───┴───┴───┴───┴───┴───┴───┴───┴───┘%@NL@%
  2281. %@NL@%
  2282. %@4@%Clears the carry flag.%@EH@%%@NL@%
  2283. %@NL@%
  2284. ───────────────────────────────────────────────────────────────────────────%@NL@%
  2285. ┌───────────┐%@NL@%
  2286. │ 11111000  │%@NL@%
  2287. └───────────┘%@NL@%
  2288. ────────────────┬─────────────────────────┬────────────────────────────────%@NL@%
  2289.                 │ clc                     │ 88/86     2%@NL@%
  2290. %@AB@%CLC%@AE@%             │                         │   286     2%@NL@%
  2291.                 │                         │   386     2%@NL@%
  2292. ────────────────┴─────────────────────────┴────────────────────────────────%@NL@%
  2293. %@NL@%
  2294. %@NL@%
  2295. %@NL@%
  2296. %@3@%%@AB@%CLD%@AE@%%@CR:CLD       @%%@EH@%%@QR:cld@%%@NL@%
  2297. %@AB@%Clear Direction Flag%@AE@%%@QR:clear direction flag@%%@QR:clear direction@%%@NL@%
  2298. ┌───┬───┬───┬───┬───┬───┬───┬───┬───┐%@NL@%
  2299. │ O │ D │ I │ T │ S │ Z │ A │ P │ C │%@NL@%
  2300. ├───┼───┼───┼───┼───┼───┼───┼───┼───┤%@NL@%
  2301. │   │ 0 │   │   │   │   │   │   │   │%@NL@%
  2302. └───┴───┴───┴───┴───┴───┴───┴───┴───┘%@NL@%
  2303. %@NL@%
  2304. %@4@%Clears the direction flag. All subsequent string%@EH@%
  2305. instructions will process up (from low addresses to high
  2306. addresses), by increasing the appropriate index registers.%@NL@%
  2307. %@NL@%
  2308. ───────────────────────────────────────────────────────────────────────────%@NL@%
  2309. ┌───────────┐%@NL@%
  2310. │ 11111100  │%@NL@%
  2311. └───────────┘%@NL@%
  2312. ────────────────┬──────────────────────────┬───────────────────────────────%@NL@%
  2313.                 │ cld                      │88/86     2%@NL@%
  2314. %@AB@%CLD%@AE@%             │                          │  286     2%@NL@%
  2315.                 │                          │  386     2%@NL@%
  2316. ────────────────┴──────────────────────────┴───────────────────────────────%@NL@%
  2317. %@NL@%
  2318. %@NL@%
  2319. %@CR:47        @%%@NL@%
  2320. %@3@%%@AB@%CLI%@AE@%%@CR:CLI       @%%@EH@%%@QR:cli@%%@NL@%
  2321. %@AB@%Clear Interrupt Flag%@AE@%%@QR:clear interrupt flag@%%@QR:clear interrupt@%%@NL@%
  2322. ┌───┬───┬───┬───┬───┬───┬───┬───┬───┐%@NL@%
  2323. │ O │ D │ I │ T │ S │ Z │ A │ P │ C │%@NL@%
  2324. ├───┼───┼───┼───┼───┼───┼───┼───┼───┤%@NL@%
  2325. │   │   │ 0 │   │   │   │   │   │   │%@NL@%
  2326. └───┴───┴───┴───┴───┴───┴───┴───┴───┘%@NL@%
  2327. %@NL@%
  2328. %@4@%Clears the interrupt flag. When the interrupt flag is%@EH@%
  2329. cleared, maskable interrupts are not recognized until the
  2330. flag is set again with the %@AB@%STI%@AE@% instruction. In privileged
  2331. mode, %@AB@%CLI%@AE@% only clears the flag if the current task's
  2332. privilege level is less than or equal to the value of the
  2333. IOPL flag. Otherwise, a general protection fault is
  2334. generated.%@NL@%
  2335. %@NL@%
  2336. ───────────────────────────────────────────────────────────────────────────%@NL@%
  2337. ┌───────────┐%@NL@%
  2338. │ 11111010  │%@NL@%
  2339. └───────────┘%@NL@%
  2340. ────────────────┬─────────────────────────┬────────────────────────────────%@NL@%
  2341.                 │ cli                     │ 88/86     2%@NL@%
  2342. %@AB@%CLI%@AE@%             │                         │   286     3%@NL@%
  2343.                 │                         │   386     3%@NL@%
  2344. ────────────────┴─────────────────────────┴────────────────────────────────%@NL@%
  2345. %@NL@%
  2346. %@NL@%
  2347. %@NL@%
  2348. %@3@%%@AB@%CLTS%@AE@%%@CR:CLTS      @%%@EH@%%@QR:clts@%%@NL@%
  2349. %@AB@%Clear Task Switched Flag%@AE@%%@QR:clear task switched flag@%%@QR:clear switched flag@%%@QR:clear task flag@%%@NL@%
  2350. %@AB@%80286/386 Privileged Only%@AE@%%@NL@%
  2351. ┌───┬───┬───┬───┬───┬───┬───┬───┬───┐%@NL@%
  2352. │ O │ D │ I │ T │ S │ Z │ A │ P │ C │%@NL@%
  2353. ├───┼───┼───┼───┼───┼───┼───┼───┼───┤%@NL@%
  2354. │   │   │   │   │   │   │   │   │   │%@NL@%
  2355. └───┴───┴───┴───┴───┴───┴───┴───┴───┘%@NL@%
  2356. %@NL@%
  2357. %@4@%Clears the task switched flag in the Machine Status Word%@EH@%
  2358. (MSW) of the 80286 or the %@AB@%CR0%@AE@% register of the 80386. This
  2359. instruction can be used only in systems software executing
  2360. at privilege level 0. See Intel documentation for details on
  2361. the task switched flag and other privileged-mode concepts.%@NL@%
  2362. %@NL@%
  2363. ───────────────────────────────────────────────────────────────────────────%@NL@%
  2364. ┌───────────┐ ┌───────────┐%@NL@%
  2365. │ 00001111  │ │ 00000110  │%@NL@%
  2366. └───────────┘ └───────────┘%@NL@%
  2367. ────────────────┬─────────────────────────┬────────────────────────────────%@NL@%
  2368.                 │ clts                    │ 88/86     ─%@NL@%
  2369. %@AB@%CLTS%@AE@%            │                         │   286     2%@NL@%
  2370.                 │                         │   386     5%@NL@%
  2371. ────────────────┴─────────────────────────┴────────────────────────────────%@NL@%
  2372. %@NL@%
  2373. %@NL@%
  2374. %@CR:48        @%%@NL@%
  2375. %@3@%%@AB@%CMC%@AE@%%@CR:CMC       @%%@EH@%%@QR:cmc@%%@NL@%
  2376. %@AB@%Complement Carry Flag%@AE@%%@QR:complement carry flag@%%@QR:carry flag@%%@NL@%
  2377. ┌───┬───┬───┬───┬───┬───┬───┬───┬───┐%@NL@%
  2378. │ O │ D │ I │ T │ S │ Z │ A │ P │ C │%@NL@%
  2379. ├───┼───┼───┼───┼───┼───┼───┼───┼───┤%@NL@%
  2380. │   │   │   │   │   │   │   │   │ ± │%@NL@%
  2381. └───┴───┴───┴───┴───┴───┴───┴───┴───┘%@NL@%
  2382. %@NL@%
  2383. %@4@%Complements (toggles) the carry flag.%@EH@%%@NL@%
  2384. %@NL@%
  2385. ───────────────────────────────────────────────────────────────────────────%@NL@%
  2386. ┌───────────┐%@NL@%
  2387. │ 11110101  │%@NL@%
  2388. └───────────┘%@NL@%
  2389. ───────────────┬──────────────────────────┬────────────────────────────────%@NL@%
  2390.                │ cmc                      │ 88/86     2%@NL@%
  2391. %@AB@%CMC%@AE@%            │                          │   286     2%@NL@%
  2392.                │                          │   386     2%@NL@%
  2393. ───────────────┴──────────────────────────┴────────────────────────────────%@NL@%
  2394. %@NL@%
  2395. %@NL@%
  2396. %@CR:49        @%%@NL@%
  2397. %@3@%%@AB@%CMP%@AE@%%@CR:CMP       @%%@EH@%%@QR:cmp@%%@NL@%
  2398. %@AB@%Compare Two Operands%@AE@%%@QR:compare two operands@%%@QR:compare@%%@NL@%
  2399. ┌───┬───┬───┬───┬───┬───┬───┬───┬───┐%@NL@%
  2400. │ O │ D │ I │ T │ S │ Z │ A │ P │ C │%@NL@%
  2401. ├───┼───┼───┼───┼───┼───┼───┼───┼───┤%@NL@%
  2402. │ ± │   │   │   │ ± │ ± │ ± │ ± │ ± │%@NL@%
  2403. └───┴───┴───┴───┴───┴───┴───┴───┴───┘%@NL@%
  2404. %@NL@%
  2405. %@4@%Compares two operands as a test for a subsequent conditional%@EH@%
  2406. jump or set instruction. %@AB@%CMP%@AE@% does this by subtracting the
  2407. source operand from the destination operand and setting the
  2408. flags according to the result. %@AB@%CMP%@AE@% is the same as the %@AB@%SUB%@AE@%
  2409. instruction, except that the result is not stored.%@NL@%
  2410. %@NL@%
  2411. ───────────────────────────────────────────────────────────────────────────%@NL@%
  2412. ┌───────────┐ ┌─────────────┐%@NL@%
  2413. │ 001110%@AI@%dw%@AE@%  │ │ %@AI@%mod,reg,r/m%@AE@% │     %@AI@%disp%@AE@% %@AI@%(0%@AE@% %@AI@%or%@AE@% %@AI@%2)%@AE@%%@NL@%
  2414. └───────────┘ └─────────────┘%@NL@%
  2415. ────────────────┬─────────────────────────┬────────────────────────────────%@NL@%
  2416.                 │ cmp   di,bx             │ 88/86     3%@NL@%
  2417. %@AB@%CMP  %@AI@%reg,reg%@AE@%    │ cmp   dl,cl             │   286     2%@NL@%
  2418.                 │                         │   386     2%@NL@%
  2419. ────────────────┼─────────────────────────┼────────────────────────────────%@NL@%
  2420.                 │ cmp   maximum,dx        │ 88/86     9+EA (W88=13+EA)%@NL@%
  2421. %@AB@%CMP  %@AI@%mem,reg%@AE@%    │ cmp   array[si],bl      │   286     7%@NL@%
  2422.                 │                         │   386     5%@NL@%
  2423. ────────────────┼─────────────────────────┼────────────────────────────────%@NL@%
  2424.                 │ cmp   dx,minimum        │ 88/86     9+EA (W88=13+EA)%@NL@%
  2425. %@AB@%CMP  %@AI@%reg,mem%@AE@%    │ cmp   bh,array[si]      │   286     6%@NL@%
  2426.                 │                         │   386     6%@NL@%
  2427. ────────────────┴─────────────────────────┴────────────────────────────────%@NL@%
  2428. ┌───────────┐ ┌─────────────┐%@NL@%
  2429. │ 100000%@AI@%sw%@AE@%  │ │ %@AI@%mod%@AE@%,111,%@AI@%r/m%@AE@% │     %@AI@%disp%@AE@% %@AI@%(0%@AE@% %@AI@%or%@AE@% %@AI@%2)%@AE@%     %@AI@%data%@AE@% %@AI@%(1%@AE@% %@AI@%or%@AE@% %@AI@%2)%@AE@%%@NL@%
  2430. └───────────┘ └─────────────┘%@NL@%
  2431. ────────────────┬─────────────────────────┬────────────────────────────────%@NL@%
  2432.                 │ cmp   ax,24             │ 88/86     4%@NL@%
  2433. %@AB@%CMP  %@AI@%reg,immed%@AE@%  │                         │   286     3%@NL@%
  2434.                 │                         │   386     2%@NL@%
  2435. ────────────────┼─────────────────────────┼────────────────────────────────%@NL@%
  2436.                 │ cmp   WORD PTR [di],4   │ 88/86     10+EA (W88=14+EA)%@NL@%
  2437. %@AB@%CMP  %@AI@%mem,immed%@AE@%  │ cmp   tester,4000       │   286     6%@NL@%
  2438.                 │                         │   386     5%@NL@%
  2439. ────────────────┴─────────────────────────┴────────────────────────────────%@NL@%
  2440. ┌───────────┐%@NL@%
  2441. │ 0011110%@AI@%w%@AE@%  │     %@AI@%data%@AE@% %@AI@%(1%@AE@% %@AI@%or%@AE@% %@AI@%2)%@AE@%%@NL@%
  2442. └───────────┘%@NL@%
  2443. ────────────────┬─────────────────────────┬────────────────────────────────%@NL@%
  2444.                 │ cmp   ax,1000           │ 88/86     4%@NL@%
  2445. %@AB@%CMP  %@AI@%accum,immed%@AE@%│                         │   286     3%@NL@%
  2446.                 │                         │   386     2%@NL@%
  2447. ────────────────┴─────────────────────────┴────────────────────────────────%@NL@%
  2448. %@NL@%
  2449. %@NL@%
  2450. %@CR:50        @%%@NL@%
  2451. %@3@%%@AB@%CMPS%@AE@%%@CR:CMPS      @%/%@AB@%CMPSB%@AE@%/%@EH@%%@QR:cmps@%%@QR:cmpsb@%%@NL@%
  2452. %@AB@%CMPSW%@AE@%/%@AB@%CMPSD%@AE@%%@QR:cmpsw@%%@QR:cmpsd@%%@NL@%
  2453. %@AB@%Compare String%@AE@%%@QR:compare string@%%@QR:string compare@%%@NL@%
  2454. ┌───┬───┬───┬───┬───┬───┬───┬───┬───┐%@NL@%
  2455. │ O │ D │ I │ T │ S │ Z │ A │ P │ C │%@NL@%
  2456. ├───┼───┼───┼───┼───┼───┼───┼───┼───┤%@NL@%
  2457. │ ± │   │   │   │ ± │ ± │ ± │ ± │ ± │%@NL@%
  2458. └───┴───┴───┴───┴───┴───┴───┴───┴───┘%@NL@%
  2459. %@NL@%
  2460. %@4@%Compares two strings. %@AB@%DS%@AE@%:%@AB@%SI%@AE@% must point to the source string%@EH@%
  2461. and %@AB@%ES%@AE@%:%@AB@%DI %@AE@%must point to the destination string (even if
  2462. operands are given). For each comparison, the destination
  2463. element is subtracted from the source element and the flags
  2464. are updated to reflect the result (although the result is
  2465. not stored). %@AB@%DI%@AE@% and %@AB@%SI%@AE@% are adjusted according to the size of
  2466. the operands and the status of the direction flag. They are
  2467. increased if the direction flag has been cleared with %@AB@%CLD%@AE@% or
  2468. decreased if the direction flag has been set with %@AB@%STD%@AE@%.%@NL@%
  2469. %@NL@%
  2470. %@4@%If the %@AB@%CMPS%@AE@% form of the instruction is used, operands must%@EH@%
  2471. be provided to indicate the size of the data elements to be
  2472. processed. A segment override can be given for the source
  2473. (but not for the destination). If %@AB@%CMPSB%@AE@% (bytes), %@AB@%CMPSW%@AE@%
  2474. (words), or %@AB@%CMPSD%@AE@% (doublewords on the 80386 only) is used,
  2475. the instruction determines the size of the data elements
  2476. to be processed. Operands are not allowed.%@NL@%
  2477. %@NL@%
  2478. %@4@%%@AB@%CMPS%@AE@% and its variations are usually used with repeat%@EH@%
  2479. prefixes. %@AB@%REPNE%@AE@% (or %@AB@%REPNZ%@AE@%) is used to find the first match
  2480. between two strings. %@AB@%REPE%@AE@% (or %@AB@%REPZ%@AE@%) is used to find the
  2481. first nonmatch. Before the comparison, %@AB@%CX%@AE@% should contain
  2482. the maximum number of elements to compare. After a %@AB@%REPNE CMPS%@AE@%,
  2483. the zero flag will be cleared if no match was found. After a
  2484. %@AB@%REPE CMPS%@AE@%, the zero flag will be set if no nonmatch was
  2485. found. Otherwise %@AB@%SI%@AE@% and %@AB@%DI%@AE@% will point to the element
  2486. after the first match or nonmatch.%@NL@%
  2487. %@NL@%
  2488. ───────────────────────────────────────────────────────────────────────────%@NL@%
  2489. ┌───────────┐%@NL@%
  2490. │ 1010011%@AI@%w%@AE@%  │%@NL@%
  2491. └───────────┘%@NL@%
  2492. ─────────────────────────────┬────────────────────┬────────────────────────%@NL@%
  2493. %@AB@%CMPS  %@AE@%«%@AI@%segreg%@AB@%:%@AE@%»%@AI@%src,%@AE@%«%@AB@%ES:%@AE@%»%@AI@%dest%@AE@% │cmps  source,es:dest│ 88/86   22 (W88=30)%@NL@%
  2494. %@AB@%CMPSB%@AE@%                        │repne cmpsw         │   286   8%@NL@%
  2495. %@AB@%CMPSW%@AE@%                        │repe  cmpsb         │   386   10%@NL@%
  2496. ─────────────────────────────┴────────────────────┴────────────────────────%@NL@%
  2497. %@NL@%
  2498. %@NL@%
  2499. %@CR:51        @%%@NL@%
  2500. %@3@%%@AB@%CWD%@AE@%%@CR:CWD       @%%@EH@%%@QR:cwd@%%@NL@%
  2501. %@AB@%Convert Word to Double%@AE@%%@QR:convert word@%%@QR:convert word to double@%%@QR:word to double@%%@QR:convert@%%@NL@%
  2502. ┌───┬───┬───┬───┬───┬───┬───┬───┬───┐%@NL@%
  2503. │ O │ D │ I │ T │ S │ Z │ A │ P │ C │%@NL@%
  2504. ├───┼───┼───┼───┼───┼───┼───┼───┼───┤%@NL@%
  2505. │   │   │   │   │   │   │   │   │   │%@NL@%
  2506. └───┴───┴───┴───┴───┴───┴───┴───┴───┘%@NL@%
  2507. %@NL@%
  2508. %@4@%Converts the signed word in %@AB@%AX%@AE@% to a signed word in the %@AB@%DX%@AE@%:%@AB@%AX%@AE@%%@EH@%
  2509. register pair by extending the sign bit of %@AB@%AX%@AE@% into all bits
  2510. of %@AB@%DX%@AE@%.%@NL@%
  2511. %@NL@%
  2512. ───────────────────────────────────────────────────────────────────────────%@NL@%
  2513. ┌────────────┐%@NL@%
  2514. │ 10011001%@FN@%
  2515. %@FC@%1. %@AB@%CWD%@AE@% and %@AB@%CDQ%@AE@% have the same encoding except that
  2516. %@FC@%in 32-bit mode %@AB@%CWD%@AE@% is preceded by the operand-size byte (66h)
  2517. %@FC@%but %@AB@%CDQ%@AE@% is not; in 16-bit mode %@AB@%CDQ%@AE@% is preceded
  2518. %@FC@%by the operand-size byte but %@AB@%CWD%@AE@% is not.%@EF@%1 │%@NL@%
  2519. └────────────┘%@NL@%
  2520. ────────────────┬─────────────────────────┬────────────────────────────────%@NL@%
  2521.                 │ cwd                     │ 88/86     5 %@NL@%
  2522. %@AB@%CWD%@AE@%             │                         │   286     2%@NL@%
  2523.                 │                         │   386     2%@NL@%
  2524. ────────────────┴─────────────────────────┴────────────────────────────────%@NL@%
  2525. %@NL@%
  2526. %@NL@%
  2527. %@NL@%
  2528. %@3@%%@AB@%CWDE%@AE@%%@CR:CWDE      @%%@EH@%%@QR:cwde@%%@NL@%
  2529. %@AB@%Convert Word to Extended Double%@AE@%%@QR:convert@%%@QR:convert word@%%@QR:word to extended double@%%@QR:word to double@%%@QR:convert word to double@%%@NL@%
  2530. %@AB@%80386 Only%@AE@%%@NL@%
  2531. ┌───┬───┬───┬───┬───┬───┬───┬───┬───┐%@NL@%
  2532. │ O │ D │ I │ T │ S │ Z │ A │ P │ C │%@NL@%
  2533. ├───┼───┼───┼───┼───┼───┼───┼───┼───┤%@NL@%
  2534. │   │   │   │   │   │   │   │   │   │%@NL@%
  2535. └───┴───┴───┴───┴───┴───┴───┴───┴───┘%@NL@%
  2536. %@NL@%
  2537. %@4@%Converts a signed word in %@AB@%AX%@AE@% to a signed doubleword in %@AB@%EAX%@AE@%%@EH@%
  2538. by extending the sign bit of %@AB@%AX%@AE@% into all bits of %@AB@%EAX%@AE@%.%@NL@%
  2539. %@NL@%
  2540. ───────────────────────────────────────────────────────────────────────────%@NL@%
  2541. ┌────────────┐%@NL@%
  2542. │ 10011000%@FN@%
  2543. %@FC@%1. %@AB@%CBW%@AE@% and %@AB@%CWDE%@AE@% have the same encoding except
  2544. %@FC@%that in 32-bit mode %@AB@%CBW%@AE@% is preceded by the operand-size byte
  2545. %@FC@%(66h) but %@AB@%CWDE%@AE@% is not; in 16-bit mode %@AB@%CWDE%@AE@% is
  2546. %@FC@%preceded by the operand-size byte but %@AB@%CBW%@AE@% is not.%@EF@%1 │%@NL@%
  2547. └────────────┘%@NL@%
  2548. ──────────────┬────────────────────────────┬───────────────────────────────%@NL@%
  2549.               │ cwde                       │ 88/86     ─%@NL@%
  2550. %@AB@%CWDE%@AE@%          │                            │   286     ─%@NL@%
  2551.               │                            │   386     3%@NL@%
  2552. ──────────────┴────────────────────────────┴───────────────────────────────%@NL@%
  2553. %@NL@%
  2554. %@NL@%
  2555. %@CR:52        @%%@NL@%
  2556. %@3@%%@AB@%DAA%@AE@%%@CR:DAA       @%%@EH@%%@QR:daa@%%@NL@%
  2557. %@AB@%Decimal Adjust After Addition%@AE@%%@QR:decimal adjust@%%@QR:decimal adjust after addition@%%@NL@%
  2558. ┌───┬───┬───┬───┬───┬───┬───┬───┬───┐%@NL@%
  2559. │ O │ D │ I │ T │ S │ Z │ A │ P │ C │%@NL@%
  2560. ├───┼───┼───┼───┼───┼───┼───┼───┼───┤%@NL@%
  2561. │ ? │   │   │   │ ± │ ± │ ± │ ± │ ± │%@NL@%
  2562. └───┴───┴───┴───┴───┴───┴───┴───┴───┘%@NL@%
  2563. %@NL@%
  2564. %@4@%Adjusts the result of an addition to a packed BCD number%@EH@%
  2565. (less than 100 decimal). The previous addition instruction
  2566. should place its 8-bit binary sum in %@AB@%AL%@AE@%. %@AB@%DAA%@AE@% converts this
  2567. binary sum to packed BCD format with the least significant
  2568. decimal digit in the lower four bits and the most
  2569. significant digit in the upper four bits. If the sum is
  2570. greater than 99h after adjustment, then the carry and
  2571. auxiliary carry flags are set. Otherwise, the carry and
  2572. auxiliary carry flags are cleared.%@NL@%
  2573. %@NL@%
  2574. ───────────────────────────────────────────────────────────────────────────%@NL@%
  2575. ┌───────────┐%@NL@%
  2576. │ 00100111  │%@NL@%
  2577. └───────────┘%@NL@%
  2578. ─────────────────┬─────────────────────────┬───────────────────────────────%@NL@%
  2579.                  │ daa                     │ 88/86     4%@NL@%
  2580. %@AB@%DAA%@AE@%              │                         │   286     3%@NL@%
  2581.                  │                         │   386     4%@NL@%
  2582. ─────────────────┴─────────────────────────┴───────────────────────────────%@NL@%
  2583. %@NL@%
  2584. %@NL@%
  2585. %@NL@%
  2586. %@3@%%@AB@%DAS%@AE@%%@CR:DAS       @%%@EH@%%@QR:das@%%@NL@%
  2587. %@AB@%Decimal Adjust after Subtraction%@AE@%%@QR:decimal adjust@%%@NL@%
  2588. ┌───┬───┬───┬───┬───┬───┬───┬───┬───┐%@NL@%
  2589. │ O │ D │ I │ T │ S │ Z │ A │ P │ C │%@NL@%
  2590. ├───┼───┼───┼───┼───┼───┼───┼───┼───┤%@NL@%
  2591. │ ? │   │   │   │ ± │ ± │ ± │ ± │ ± │%@NL@%
  2592. └───┴───┴───┴───┴───┴───┴───┴───┴───┘%@NL@%
  2593. %@NL@%
  2594. %@4@%Adjusts the result of a subtraction to a packed BCD%@EH@%
  2595. number (less than 100 decimal). The previous subtraction
  2596. instruction should place its 8-bit binary result in %@AB@%AL%@AE@%. %@AB@%DAS%@AE@%
  2597. converts this binary sum to packed BCD format with the least
  2598. significant decimal digit in the lower four bits and the
  2599. most significant digit in the upper four bits. If the sum
  2600. is greater than 99h after adjustment, then the carry and
  2601. auxiliary carry flags are set. Otherwise, the carry and
  2602. auxiliary carry flags are cleared.%@NL@%
  2603. %@NL@%
  2604. ───────────────────────────────────────────────────────────────────────────%@NL@%
  2605. ┌───────────┐%@NL@%
  2606. │ 00101111  │%@NL@%
  2607. └───────────┘%@NL@%
  2608. ─────────────────┬─────────────────────────┬───────────────────────────────%@NL@%
  2609.                  │ das                     │ 88/86     4%@NL@%
  2610. %@AB@%DAS%@AE@%              │                         │   286     3%@NL@%
  2611.                  │                         │   386     4%@NL@%
  2612. ─────────────────┴─────────────────────────┴───────────────────────────────%@NL@%
  2613. %@NL@%
  2614. %@NL@%
  2615. %@CR:53        @%%@NL@%
  2616. %@3@%%@AB@%DEC%@AE@%%@CR:DEC       @%%@EH@%%@QR:dec@%%@NL@%
  2617. %@AB@%Decrement%@AE@%%@QR:decrement@%%@NL@%
  2618. ┌───┬───┬───┬───┬───┬───┬───┬───┬───┐%@NL@%
  2619. │ O │ D │ I │ T │ S │ Z │ A │ P │ C │%@NL@%
  2620. ├───┼───┼───┼───┼───┼───┼───┼───┼───┤%@NL@%
  2621. │ ± │   │   │   │ ± │ ± │ ± │ ± │   │%@NL@%
  2622. └───┴───┴───┴───┴───┴───┴───┴───┴───┘%@NL@%
  2623. %@NL@%
  2624. %@4@%Subtracts 1 from the destination operand. Because the%@EH@%
  2625. operand is treated as an unsigned integer, the %@AB@%DEC%@AE@%
  2626. instruction does not affect the carry flag. If a signed
  2627. borrow requires detection, use the %@AB@%SUB%@AE@% instruction.%@NL@%
  2628. %@NL@%
  2629. ───────────────────────────────────────────────────────────────────────────%@NL@%
  2630. ┌───────────┐ ┌─────────────┐%@NL@%
  2631. │ 1111111%@AI@%w%@AE@%  │ │ %@AI@%mod,%@AE@%001%@AI@%,r/m%@AE@% │     %@AI@%disp%@AE@% %@AI@%(0%@AE@% %@AI@%or%@AE@% %@AI@%2)%@AE@%%@NL@%
  2632. └───────────┘ └─────────────┘%@NL@%
  2633. ─────────────────┬─────────────────────────┬───────────────────────────────%@NL@%
  2634.                  │ dec   cl                │ 88/86     3%@NL@%
  2635. %@AB@%DEC  %@AI@%reg8%@AE@%        │                         │   286     2%@NL@%
  2636.                  │                         │   386     2%@NL@%
  2637. ─────────────────┼─────────────────────────┼───────────────────────────────%@NL@%
  2638.                  │ dec   counter           │ 88/86     15+EA (W88=23+EA)%@NL@%
  2639. %@AB@%DEC  %@AI@%mem%@AE@%         │                         │   286     7%@NL@%
  2640.                  │                         │   386     6%@NL@%
  2641. ─────────────────┴─────────────────────────┴───────────────────────────────%@NL@%
  2642. ┌───────────┐%@NL@%
  2643. │ 01001 %@AI@%reg%@AE@% │%@NL@%
  2644. └───────────┘%@NL@%
  2645. ─────────────────┬─────────────────────────┬───────────────────────────────%@NL@%
  2646. %@AB@%DEC  %@AI@%reg16%@AE@%       │ dec   ax                │ 88/86     3%@NL@%
  2647. %@AB@%DEC  %@AI@%reg32%@AE@%%@FN@%
  2648. %@FC@%1. 80386 only.%@EF@%1     │                         │   286     2%@NL@%
  2649.                  │                         │   386     2%@NL@%
  2650. ─────────────────┴─────────────────────────┴───────────────────────────────%@NL@%
  2651. %@NL@%
  2652. %@NL@%
  2653. %@CR:54        @%%@NL@%
  2654. %@3@%%@AB@%DIV%@AE@%%@CR:DIV       @%%@EH@%%@QR:div@%%@NL@%
  2655. %@AB@%Unsigned Divide%@AE@%%@QR:divide@%%@NL@%
  2656. ┌───┬───┬───┬───┬───┬───┬───┬───┬───┐%@NL@%
  2657. │ O │ D │ I │ T │ S │ Z │ A │ P │ C │%@NL@%
  2658. ├───┼───┼───┼───┼───┼───┼───┼───┼───┤%@NL@%
  2659. │ ? │   │   │   │ ? │ ? │ ? │ ? │ ? │%@NL@%
  2660. └───┴───┴───┴───┴───┴───┴───┴───┴───┘%@NL@%
  2661. %@NL@%
  2662. %@4@%Divides an implied destination operand by a specified%@EH@%
  2663. source operand. Both operands are treated as unsigned numbers.
  2664. If the source (divisor) is 16 bits wide, then the implied
  2665. destination (dividend) is the %@AB@%DX%@AE@%:%@AB@%AX%@AE@% register pair. The
  2666. quotient goes into %@AB@%AX%@AE@% and the remainder into %@AB@%DX%@AE@%. If the
  2667. source is 8 bits wide, the implied destination operand is
  2668. %@AB@%AX%@AE@%. The quotient goes into %@AB@%AL%@AE@% and the remainder into %@AB@%AH%@AE@%. On
  2669. the 80386, if the source is %@AB@%EAX%@AE@%, the quotient goes into %@AB@%EAX%@AE@%
  2670. and the divisor into %@AB@%EDX%@AE@%.%@NL@%
  2671. %@NL@%
  2672. ───────────────────────────────────────────────────────────────────────────%@NL@%
  2673. ┌───────────┐ ┌─────────────┐%@NL@%
  2674. │ 1111011%@AI@%w%@AE@%  │ │ %@AI@%mod,%@AE@%110%@AI@%,r/m%@AE@% │     %@AI@%disp%@AE@% %@AI@%(0%@AE@% %@AI@%or%@AE@% %@AI@%2)%@AE@%%@NL@%
  2675. └───────────┘ └─────────────┘%@NL@%
  2676. ──────────────┬─────────────────────────┬──────────────────────────────────%@NL@%
  2677.               │ div   cx                │ 88/86    b=80-90,w=144-162%@NL@%
  2678. %@AB@%DIV  %@AI@%reg%@AE@%      │ div   dl                │   286    b=14,w=22%@NL@%
  2679.               │                         │   386    b=14,w=22,w=38%@NL@%
  2680. ──────────────┼─────────────────────────┼──────────────────────────────────%@NL@%
  2681.               │ div   [bx]              │ 88/86    (b=86-96,w=150-168)+EA%@FN@%
  2682. %@FC@%1. Word memory operands on the 8088 take (158-176)+EA clocks.%@EF@%1%@NL@%
  2683. %@AB@%DIV  %@AI@%mem%@AE@%      │ div   fsize             │   286    b=17,w=25%@NL@%
  2684.               │                         │   386    b=17,w=25,d=41%@NL@%
  2685. ──────────────┴─────────────────────────┴──────────────────────────────────%@NL@%
  2686. %@NL@%
  2687. %@NL@%
  2688. %@CR:55        @%%@NL@%
  2689. %@3@%%@AB@%ENTER%@AE@%%@CR:ENTER     @%%@EH@%%@QR:enter@%%@NL@%
  2690. %@AB@%Make Stack Frame%@AE@%%@QR:make stack frame@%%@QR:make frame@%%@QR:make stack@%%@NL@%
  2691. %@AB@%80186/286/386 Only%@AE@%%@NL@%
  2692. ┌───┬───┬───┬───┬───┬───┬───┬───┬───┐%@NL@%
  2693. │ O │ D │ I │ T │ S │ Z │ A │ P │ C │%@NL@%
  2694. ├───┼───┼───┼───┼───┼───┼───┼───┼───┤%@NL@%
  2695. │   │   │   │   │   │   │   │   │   │%@NL@%
  2696. └───┴───┴───┴───┴───┴───┴───┴───┴───┘%@NL@%
  2697. %@NL@%
  2698. %@4@%Creates a stack frame for a procedure that receives%@EH@%
  2699. parameters passed on the stack. The %@AB@%BP%@AE@% register is pushed
  2700. and %@AB@%BP%@AE@% is set as the stack frame through which parameters
  2701. and local variables can be accessed. The first operand of
  2702. the %@AB@%ENTER%@AE@% instruction specifies the number of bytes to
  2703. reserve for local variables. The second operand specifies
  2704. the nesting level for the procedure. The nesting level
  2705. should be 0 for languages that do not allow access to local
  2706. variables of higher level procedures (such as %@AB@%C%@AE@%, %@AB@%BASIC%@AE@%, and
  2707. %@AB@%FORTRAN%@AE@%). See the complementary instruction %@AB@%LEAVE%@AE@% for a
  2708. method of exiting from a procedure.%@NL@%
  2709. %@NL@%
  2710. ───────────────────────────────────────────────────────────────────────────%@NL@%
  2711. ┌───────────┐%@NL@%
  2712. │ 11001000  │     %@AI@%data%@AE@% %@AI@%(2)%@AE@%     %@AI@%data%@AE@% %@AI@%(1)%@AE@%%@NL@%
  2713. └───────────┘%@NL@%
  2714. ───────────────────────┬──────────────────────┬────────────────────────────%@NL@%
  2715.                        │ enter 4,0            │ 88/86     ─%@NL@%
  2716. %@AB@%ENTER  %@AI@%immed16,%@AB@%0%@AE@%       │                      │   286     11%@NL@%
  2717.                        │                      │   386     10%@NL@%
  2718. ───────────────────────┼──────────────────────┼────────────────────────────%@NL@%
  2719.                        │ enter 0,1            │ 88/86     ─%@NL@%
  2720. %@AB@%ENTER  %@AI@%immed16,%@AB@%1%@AE@%       │                      │   286     15%@NL@%
  2721.                        │                      │   386     12%@NL@%
  2722. ───────────────────────┼──────────────────────┼────────────────────────────%@NL@%
  2723.                        │ enter 6,4            │ 88/86     ─%@NL@%
  2724. %@AB@%ENTER  %@AI@%immed16,immed8%@AE@%  │                      │   286     12+4(n-1)%@NL@%
  2725.                        │                      │   386     15+4(n-1)%@NL@%
  2726. ───────────────────────┴──────────────────────┴────────────────────────────%@NL@%
  2727. %@NL@%
  2728. %@NL@%
  2729. %@CR:56        @%%@NL@%
  2730. %@3@%%@AB@%ESC%@AE@%%@CR:ESC       @%%@EH@%%@QR:esc@%%@NL@%
  2731. %@AB@%Escape%@AE@%%@QR:escape@%%@NL@%
  2732. ┌───┬───┬───┬───┬───┬───┬───┬───┬───┐%@NL@%
  2733. │ O │ D │ I │ T │ S │ Z │ A │ P │ C │%@NL@%
  2734. ├───┼───┼───┼───┼───┼───┼───┼───┼───┤%@NL@%
  2735. │   │   │   │   │   │   │   │   │   │%@NL@%
  2736. └───┴───┴───┴───┴───┴───┴───┴───┴───┘%@NL@%
  2737. %@NL@%
  2738. %@4@%Provides an instruction, and optionally a memory or register%@EH@%
  2739. operand, for use by a coprocessor (such as the 8087, 80287,
  2740. or 80387). The first operand must be a 6-bit constant that
  2741. specifies the bits of the coprocessor instruction. The
  2742. second operand can be either a register or memory operand
  2743. to be used by the coprocessor instruction. The CPU puts the
  2744. specified information on the data bus where it can be
  2745. accessed by the coprocessor. %@AB@%MASM%@AE@% automatically inserts
  2746. %@AB@%ESC%@AE@% instructions in coprocessor instructions.%@NL@%
  2747. %@NL@%
  2748. ───────────────────────────────────────────────────────────────────────────%@NL@%
  2749. ┌────────────┐  ┌───────────────┐%@NL@%
  2750. │ 11011%@AI@%TTT%@AE@%%@FN@%
  2751. %@FC@%1. %@AI@%TTT%@AE@% specifies the top three bits of the coprocessor opcode
  2752. %@FC@%and %@AI@%LLL%@AE@% specifies the lower three bits.%@EF@%1 │  │ %@AI@%mod,LLL%@AE@%%@FN@%
  2753. %@FC@%1. %@AI@%TTT%@AE@% specifies the top three bits of the coprocessor opcode
  2754. %@FC@%and %@AI@%LLL%@AE@% specifies the lower three bits.%@EF@%1%@AI@%,r/m%@AE@% │%@NL@%
  2755. └────────────┘  └───────────────┘%@NL@%
  2756. ───────────────┬───────────────────────────┬───────────────────────────────%@NL@%
  2757.                │ esc   5,al                │ 88/86     2%@NL@%
  2758. %@AB@%ESC  %@AI@%immed%@AE@%,%@AI@%reg%@AE@% │                           │   286     9-20%@NL@%
  2759.                │                           │   386     %@FN@%
  2760. %@FC@%2. Timings vary. See the 80387 timings in the coprocessor section.%@EF@%2%@NL@%
  2761. ───────────────┼───────────────────────────┼───────────────────────────────%@NL@%
  2762.                │ esc   29,[bx]             │ 88/86     8+EA (W88=12+EA)%@NL@%
  2763. %@AB@%ESC  %@AI@%immed%@AE@%,%@AI@%mem%@AE@% │                           │   286     9-20%@NL@%
  2764.                │                           │   386     %@FN@%
  2765. %@FC@%2. Timings vary. See the 80387 timings in the coprocessor section.%@EF@%2%@NL@%
  2766. ───────────────┴───────────────────────────┴───────────────────────────────%@NL@%
  2767. %@NL@%
  2768. %@NL@%
  2769. %@NL@%
  2770. %@3@%%@AB@%HLT%@AE@%%@CR:HLT       @%%@EH@%%@QR:hlt@%%@NL@%
  2771. %@AB@%Halt%@AE@%%@QR:halt@%%@NL@%
  2772. ┌───┬───┬───┬───┬───┬───┬───┬───┬───┐%@NL@%
  2773. │ O │ D │ I │ T │ S │ Z │ A │ P │ C │%@NL@%
  2774. ├───┼───┼───┼───┼───┼───┼───┼───┼───┤%@NL@%
  2775. │   │   │   │   │   │   │   │   │   │%@NL@%
  2776. └───┴───┴───┴───┴───┴───┴───┴───┴───┘%@NL@%
  2777. %@NL@%
  2778. %@4@%Stops CPU execution until an interrupt restarts execution at%@EH@%
  2779. the instruction following %@AB@%HLT%@AE@%.%@NL@%
  2780. %@NL@%
  2781. ───────────────────────────────────────────────────────────────────────────%@NL@%
  2782. ┌───────────┐%@NL@%
  2783. │ 11110100  │%@NL@%
  2784. └───────────┘%@NL@%
  2785. ────────────────┬──────────────────────────┬───────────────────────────────%@NL@%
  2786.                 │ hlt                      │ 88/86     2%@NL@%
  2787. %@AB@%HLT%@AE@%             │                          │   286     2%@NL@%
  2788.                 │                          │   386     5%@NL@%
  2789. ────────────────┴──────────────────────────┴───────────────────────────────%@NL@%
  2790. %@NL@%
  2791. %@NL@%
  2792. %@CR:57        @%%@NL@%
  2793. %@3@%%@AB@%IDIV%@AE@%%@CR:IDIV      @%%@EH@%%@QR:idiv@%%@NL@%
  2794. %@AB@%Signed Divide%@AE@%%@QR:signed divide@%%@QR:divide@%%@NL@%
  2795. ┌───┬───┬───┬───┬───┬───┬───┬───┬───┐%@NL@%
  2796. │ O │ D │ I │ T │ S │ Z │ A │ P │ C │%@NL@%
  2797. ├───┼───┼───┼───┼───┼───┼───┼───┼───┤%@NL@%
  2798. │ ? │   │   │   │ ? │ ? │ ? │ ? │ ? │%@NL@%
  2799. └───┴───┴───┴───┴───┴───┴───┴───┴───┘%@NL@%
  2800. %@NL@%
  2801. %@4@%Divides an implied destination operand by a specified source%@EH@%
  2802. operand. Both operands are treated as signed numbers. If the
  2803. source (divisor) is 16 bits wide, then the implied destination
  2804. (dividend) is the %@AB@%DX%@AE@%:%@AB@%AX%@AE@% register pair. The quotient goes into %@AB@%AX%@AE@% 
  2805. and the remainder into %@AB@%DX%@AE@%. If the source is 8 bits wide, the implied
  2806. destination is %@AB@%AX%@AE@%. The quotient goes into %@AB@%AL%@AE@% and the remainder into %@AB@%AH%@AE@%.
  2807. On the 80386, if the source is %@AB@%EAX%@AE@%, the quotient goes into %@AB@%EAX%@AE@% and
  2808. the divisor into %@AB@%EDX%@AE@%.%@NL@%
  2809. %@NL@%
  2810. ───────────────────────────────────────────────────────────────────────────%@NL@%
  2811. ┌───────────┐  ┌─────────────┐%@NL@%
  2812. │ 1111011%@AI@%w%@AE@%  │  │ %@AI@%mod,%@AE@%111%@AI@%,r/m%@AE@% │     %@AI@%disp%@AE@% %@AI@%(0%@AE@% %@AI@%or%@AE@% %@AI@%2)%@AE@%%@NL@%
  2813. └───────────┘  └─────────────┘%@NL@%
  2814. ─────────────────┬─────────────────────┬───────────────────────────────────%@NL@%
  2815.                  │ idiv  bx            │88/86    b=101-112,w=165-184%@NL@%
  2816. %@AB@%IDIV  %@AI@%reg%@AE@%        │ div   dl            │  286    b=17,w=25%@NL@%
  2817.                  │                     │  386    b=19,w=27,d=43%@NL@%
  2818. ─────────────────┼─────────────────────┼───────────────────────────────────%@NL@%
  2819.                  │ idiv  itemp         │88/86    (b=107-118,w=171-190)+EA%@FN@%
  2820. %@FC@%1. Word memory operands on the 8088 take (175-194)+EA clocks.%@EF@%1%@NL@%
  2821. %@AB@%IDIV  %@AI@%mem%@AE@%        │                     │  286    b=20,w=28%@NL@%
  2822.                  │                     │  386    b=22,w=30,d=46%@NL@%
  2823. ─────────────────┴─────────────────────┴───────────────────────────────────%@NL@%
  2824. %@NL@%
  2825. %@NL@%
  2826. %@CR:58        @%%@NL@%
  2827. %@3@%%@AB@%IMUL%@AE@%%@CR:IMUL      @%%@EH@%%@QR:imul@%%@NL@%
  2828. %@AB@%Signed Multiply%@AE@%%@QR:signed multiply@%%@QR:multiply@%%@NL@%
  2829. ┌───┬───┬───┬───┬───┬───┬───┬───┬───┐%@NL@%
  2830. │ O │ D │ I │ T │ S │ Z │ A │ P │ C │%@NL@%
  2831. ├───┼───┼───┼───┼───┼───┼───┼───┼───┤%@NL@%
  2832. │ ± │   │   │   │ ? │ ? │ ? │ ? │ ± │%@NL@%
  2833. └───┴───┴───┴───┴───┴───┴───┴───┴───┘%@NL@%
  2834. %@NL@%
  2835. %@4@%Multiplies an implied destination operand by a specified%@EH@%
  2836. source operand. Both operands are treated as signed numbers.
  2837. If a single 16-bit operand is given, the implied destination
  2838. is %@AB@%AX%@AE@% and the product goes into the %@AB@%DX%@AE@%:%@AB@%AX%@AE@% register pair. If
  2839. a single 8-bit operand is given, the implied destination is
  2840. %@AB@%AL%@AE@% and the product goes into %@AB@%AX%@AE@%. On the 80386, if the
  2841. operand is %@AB@%EAX%@AE@%, the product goes into the %@AB@%EDX%@AE@%:%@AB@%EAX%@AE@% register
  2842. pair. The carry and overflow flags are set if the product is
  2843. sign extended into %@AB@%DX%@AE@% for 16-bit operands, into %@AB@%AH%@AE@% for 8-bit
  2844. operands, or into %@AB@%EDX%@AE@% for 32-bit operands.%@NL@%
  2845. %@NL@%
  2846. %@4@%Two additional syntaxes are available on the 80186-80386%@EH@%
  2847. processors. In the two-operand form, a 16-bit register gives
  2848. one of the factors and serves as the destination for the
  2849. result; a source constant specifies the other factor. In the
  2850. three-operand form, the first operand is a 16-bit register
  2851. where the result will be stored, the second is a 16-bit
  2852. register or memory operand containing one of the factors,
  2853. and the third is a constant representing the other factor.
  2854. With both variations, the overflow and carry flags are set
  2855. if the result is too large to fit into the 16-bit
  2856. destination register. Since the low 16 bits of the product
  2857. are the same for both signed and unsigned multiplication,
  2858. these syntaxes can be used for either signed or unsigned
  2859. numbers. On the 80386, the operands can either 16 or
  2860. 32 bits wide.%@NL@%
  2861. %@NL@%
  2862. %@4@%A fourth syntax is available on the 80386. Both the source%@EH@%
  2863. and destination operands can be given specifically. The
  2864. source can be any 16- or 32-bit memory operand or general-
  2865. purpose register. The destination can be any general-purpose
  2866. register of the same size. The overflow and carry flags are
  2867. set if the product does not fit in the destination.%@NL@%
  2868. %@NL@%
  2869. ───────────────────────────────────────────────────────────────────────────%@NL@%
  2870. ┌───────────┐  ┌─────────────┐%@NL@%
  2871. │ 1111011%@AI@%w%@AE@%  │  │ %@AI@%mod,%@AE@%101%@AI@%,r/m%@AE@% │     %@AI@%disp%@AE@% %@AI@%(0%@AE@% %@AI@%or%@AE@% %@AI@%2)%@AE@%%@NL@%
  2872. └───────────┘  └─────────────┘%@NL@%
  2873. ─────────────────┬────────────────────┬────────────────────────────────────%@NL@%
  2874.                  │ imul  dx           │ 88/86     b=80-98,w=128-154%@NL@%
  2875. %@AB@%IMUL  %@AI@%reg%@AE@%        │                    │   286     b=13,w=21%@NL@%
  2876.                  │                    │   386     b=9-14,w=9-22,d=9-38%@FN@%
  2877. %@FC@%2. The 80386 has an early-out multiplication algorithm. Therefore
  2878. %@FC@%multiplying an 8-bit or 16-bit value in %@AB@%EAX%@AE@% takes the same
  2879. %@FC@%time as multiplying the value in %@AB@%AL%@AE@% or %@AB@%AX%@AE@%.%@EF@%2%@NL@%
  2880. ─────────────────┼────────────────────┼────────────────────────────────────%@NL@%
  2881.                  │ imul  factor       │ 88/86     (b=86-104,w=134-160)+EA%@FN@%
  2882. %@FC@%1. Word memory operands on the 8088 take (138-164)+EA clocks.%@EF@%1%@NL@%
  2883. %@AB@%IMUL  %@AI@%mem%@AE@%        │                    │   286     b=16,w=24%@NL@%
  2884.                  │                    │   386     b=12-17,w=12-25,d=12-41%@FN@%
  2885. %@FC@%2. The 80386 has an early-out multiplication algorithm. Therefore
  2886. %@FC@%multiplying an 8-bit or 16-bit value in %@AB@%EAX%@AE@% takes the same
  2887. %@FC@%time as multiplying the value in %@AB@%AL%@AE@% or %@AB@%AX%@AE@%.%@EF@%2%@NL@%
  2888. %@CR:59        @%─────────────────┴────────────────────┴────────────────────────────────────%@NL@%
  2889. ┌───────────┐  ┌─────────────┐%@NL@%
  2890. │ 011010%@AI@%s%@AE@%1  │  │ %@AI@%mod,reg,r/m%@AE@% │     %@AI@%disp%@AE@% %@AI@%(0%@AE@% %@AI@%or%@AE@% %@AI@%2)%@AE@%     %@AI@%data%@AE@% %@AI@%(1%@AE@% %@AI@%or%@AE@% %@AI@%2)%@AE@%%@NL@%
  2891. └───────────┘  └─────────────┘%@NL@%
  2892. ─────────────────────────┬────────────────┬────────────────────────────────%@NL@%
  2893. %@AB@%IMUL  %@AI@%reg16,immed%@AE@%        │ imul  cx,25    │88/86  ─%@NL@%
  2894. %@AB@%IMUL  %@AI@%reg32,immed%@AE@%%@FN@%
  2895. %@FC@%1. 80386 only.%@EF@%1      │                │  286  21%@NL@%
  2896.                          │                │  386  b=9-14,w=9-22,d=9-38%@FN@%
  2897. %@FC@%2. The variations depend on the source constant size; destination size
  2898. %@FC@%is not a factor.%@EF@%2%@NL@%
  2899. ─────────────────────────┼────────────────┼────────────────────────────────%@NL@%
  2900. %@AB@%IMUL  %@AI@%reg16,reg16,immed%@AE@%  │ imul  dx,ax,18 │88/86  ─%@NL@%
  2901. %@AB@%IMUL  %@AI@%reg32,reg32,immed%@AE@%%@FN@%
  2902. %@FC@%1. 80386 only.%@EF@%1│                │  286  21%@NL@%
  2903.                          │                │  386  b=9-14,w=9-22,d=9-38%@FN@%
  2904. %@FC@%2. The variations depend on the source constant size; destination size
  2905. %@FC@%is not a factor.%@EF@%2%@NL@%
  2906. ─────────────────────────┼────────────────┼────────────────────────────────%@NL@%
  2907. %@AB@%IMUL  %@AI@%reg16,mem16,immed%@AE@%  │imul  bx,[si],60│88/86  ─%@NL@%
  2908. %@AB@%IMUL  %@AI@%reg32,mem32,immed%@AE@%%@FN@%
  2909. %@FC@%1. 80386 only.%@EF@%1│                │  286  24%@NL@%
  2910.                          │                │  386  b=12-17,w=12-25,d=12-41%@FN@%
  2911. %@FC@%2. The variations depend on the source constant size; destination size
  2912. %@FC@%is not a factor.%@EF@%2%@NL@%
  2913. ─────────────────────────┴────────────────┴────────────────────────────────%@NL@%
  2914. ┌───────────┐  ┌───────────┐  ┌─────────────┐%@NL@%
  2915. │ 00001111  │  │ 10101111  │  │ %@AI@%mod%@AE@%,%@AI@%reg%@AE@%,%@AI@%r/m%@AE@% │     %@AI@%disp%@AE@% %@AI@%(0%@AE@% %@AI@%or%@AE@% %@AI@%2)%@AE@%%@NL@%
  2916. └───────────┘  └───────────┘  └─────────────┘%@NL@%
  2917. ──────────────────────┬───────────────────┬────────────────────────────────%@NL@%
  2918. %@AB@%IMUL  %@AI@%reg16,reg16%@AE@%     │ imul  cx,ax       │ 88/86     ─%@NL@%
  2919. %@AB@%IMUL  %@AI@%reg16,reg16%@AE@%     │                   │   286     ─%@NL@%
  2920.                       │                   │   386     w=9-22,d=9-38%@NL@%
  2921. ──────────────────────┼───────────────────┼────────────────────────────────%@NL@%
  2922. %@AB@%IMUL  %@AI@%reg16,mem16%@AE@%     │ imul  dx,[si]     │ 88/86     ─%@NL@%
  2923. %@AB@%IMUL  %@AI@%reg32,mem32%@AE@%     │                   │   286     ─%@NL@%
  2924.                       │                   │   386     w=12-25,d=12-41%@NL@%
  2925. ──────────────────────┴───────────────────┴────────────────────────────────%@NL@%
  2926. %@NL@%
  2927. %@NL@%
  2928. %@NL@%
  2929. %@3@%%@AB@%IN%@AE@%%@CR:IN        @%%@EH@%%@QR:in@%%@NL@%
  2930. %@AB@%Input from Port%@AE@%%@QR:input from port@%%@QR:port input@%%@QR:input@%%@NL@%
  2931. ┌───┬───┬───┬───┬───┬───┬───┬───┬───┐%@NL@%
  2932. │ O │ D │ I │ T │ S │ Z │ A │ P │ C │%@NL@%
  2933. ├───┼───┼───┼───┼───┼───┼───┼───┼───┤%@NL@%
  2934. │   │   │   │   │   │   │   │   │   │%@NL@%
  2935. └───┴───┴───┴───┴───┴───┴───┴───┴───┘%@NL@%
  2936. %@NL@%
  2937. %@4@%Transfers a byte or word (or doubleword on the 80386)%@EH@%
  2938. from a port to the accumulator register. The port address is
  2939. specified by the source operand, which can be %@AB@%DX%@AE@% or an 8-bit
  2940. constant. Constants can only be used for ports numbers less
  2941. than 255; use %@AB@%DX%@AE@% for higher port numbers. In privileged
  2942. mode, a general protection fault is generated if %@AB@%IN%@AE@% is used
  2943. when the current protection level is greater than the value
  2944. of the IOPL flag.%@NL@%
  2945. %@NL@%
  2946. ───────────────────────────────────────────────────────────────────────────%@NL@%
  2947. ┌───────────┐%@NL@%
  2948. │ 1110010%@AI@%w%@AE@%  │     %@AI@%data%@AE@% %@AI@%(1)%@AE@%%@NL@%
  2949. └───────────┘%@NL@%
  2950. ─────────────────┬─────────────────────────┬───────────────────────────────%@NL@%
  2951.                  │ in    ax,60h            │ 88/86     10 (W88=14)%@NL@%
  2952. %@AB@%IN  %@AI@%accum,immed%@AE@%  │                         │   286     5%@NL@%
  2953.                  │                         │   386     12,pm=6,26%@FN@%
  2954. %@FC@%1. First protected-mode timing: CPL ≤ IOPL. Second timing: CPL > IOPL.%@EF@%1%@NL@%
  2955. ─────────────────┴─────────────────────────┴───────────────────────────────%@NL@%
  2956. ┌───────────┐%@NL@%
  2957. │ 1110110%@AI@%w%@AE@%  │%@NL@%
  2958. └───────────┘%@NL@%
  2959. ─────────────────┬─────────────────────────┬───────────────────────────────%@NL@%
  2960.                  │ in    ax,dx             │ 88/86     8 (W88=12)%@NL@%
  2961. %@AB@%IN  %@AI@%accum,%@AB@%DX%@AE@%     │ in    al,dx             │   286     5%@NL@%
  2962.                  │                         │   386     13,pm=7,27%@FN@%
  2963. %@FC@%1. First protected-mode timing: CPL ≤ IOPL. Second timing: CPL > IOPL.%@EF@%1%@NL@%
  2964. ─────────────────┴─────────────────────────┴───────────────────────────────%@NL@%
  2965. %@NL@%
  2966. %@NL@%
  2967. %@CR:60        @%%@NL@%
  2968. %@3@%%@AB@%INC%@AE@%%@CR:INC       @%%@EH@%%@QR:inc@%%@NL@%
  2969. %@AB@%Increment%@AE@%%@QR:increment@%%@NL@%
  2970. ┌───┬───┬───┬───┬───┬───┬───┬───┬───┐%@NL@%
  2971. │ O │ D │ I │ T │ S │ Z │ A │ P │ C │%@NL@%
  2972. ├───┼───┼───┼───┼───┼───┼───┼───┼───┤%@NL@%
  2973. │ ± │   │   │   │ ± │ ± │ ± │ ± │   │%@NL@%
  2974. └───┴───┴───┴───┴───┴───┴───┴───┴───┘%@NL@%
  2975. %@NL@%
  2976. %@4@%Adds 1 to the destination operand. Because the operand is%@EH@%
  2977. treated as an unsigned integer, the %@AB@%INC%@AE@% instruction does not
  2978. affect the carry flag. If a signed carry requires detection,
  2979. use the %@AB@%ADD%@AE@% instruction.%@NL@%
  2980. %@NL@%
  2981. ───────────────────────────────────────────────────────────────────────────%@NL@%
  2982. ┌───────────┐  ┌─────────────┐%@NL@%
  2983. │ 1111111%@AI@%w%@AE@%  │  │ %@AI@%mod,%@AE@%000%@AI@%,r/m%@AE@% │     %@AI@%disp%@AE@% %@AI@%(0%@AE@% %@AI@%or%@AE@% %@AI@%2)%@AE@%%@NL@%
  2984. └───────────┘  └─────────────┘%@NL@%
  2985. ─────────────────┬─────────────────────────┬───────────────────────────────%@NL@%
  2986.                  │ inc   cl                │ 88/86     3%@NL@%
  2987. %@AB@%INC  %@AI@%reg8%@AE@%        │                         │   286     2%@NL@%
  2988.                  │                         │   386     2%@NL@%
  2989. ─────────────────┼─────────────────────────┼───────────────────────────────%@NL@%
  2990.                  │ inc   vpage             │ 88/86     15+EA (W88=23+EA)%@NL@%
  2991. %@AB@%INC  %@AI@%mem%@AE@%         │                         │   286     7%@NL@%
  2992.                  │                         │   386     6%@NL@%
  2993. ─────────────────┴─────────────────────────┴───────────────────────────────%@NL@%
  2994. ┌───────────┐%@NL@%
  2995. │ 01000 %@AI@%reg%@AE@% │%@NL@%
  2996. └───────────┘%@NL@%
  2997. ─────────────────┬─────────────────────────┬───────────────────────────────%@NL@%
  2998. %@AB@%INC  %@AI@%reg16%@AE@%       │ inc   bx                │ 88/86     3%@NL@%
  2999. %@AB@%INC  %@AI@%reg32%@AE@%%@FN@%
  3000. %@FC@%1. 80386 only.%@EF@%1     │                         │   286     2%@NL@%
  3001.                  │                         │   386     2%@NL@%
  3002. ─────────────────┴─────────────────────────┴───────────────────────────────%@NL@%
  3003. %@NL@%
  3004. %@NL@%
  3005. %@CR:61        @%%@NL@%
  3006. %@3@%%@AB@%INS/INSB/INSW/INSD%@AE@%%@CR:INS       @%%@EH@%%@QR:ins@%%@QR:insb@%%@QR:insw@%%@QR:insd@%%@NL@%
  3007. %@AB@%Input from Port to String%@AE@%%@QR:input from port to string@%%@QR:port input to string@%%@QR:input to string@%%@NL@%
  3008. %@AB@%80186/286/386 Only%@AE@%%@NL@%
  3009. ┌───┬───┬───┬───┬───┬───┬───┬───┬───┐%@NL@%
  3010. │ O │ D │ I │ T │ S │ Z │ A │ P │ C │%@NL@%
  3011. ├───┼───┼───┼───┼───┼───┼───┼───┼───┤%@NL@%
  3012. │   │   │   │   │   │   │   │   │   │%@NL@%
  3013. └───┴───┴───┴───┴───┴───┴───┴───┴───┘%@NL@%
  3014. %@NL@%
  3015. %@4@%Receives a string from a port. The string is considered%@EH@%
  3016. the destination and must be pointed to by %@AB@%ES%@AE@%:%@AB@%DI%@AE@% (even if an
  3017. operand is given). The input port is specified in %@AB@%DX%@AE@%. For
  3018. each element received, %@AB@%DI%@AE@% is adjusted according to the size
  3019. of the operand and the status of the direction flag. %@AB@%DI%@AE@% is
  3020. increased if the direction flag has been cleared with %@AB@%CLD%@AE@% 
  3021. or decreased if the direction flag has been set with %@AB@%STD%@AE@%.%@NL@%
  3022. %@NL@%
  3023. %@4@%If the %@AB@%INS%@AE@% form of the instruction is used, a destination%@EH@%
  3024. operand must be provided to indicate the size of the data
  3025. elements to be processed and %@AB@%DX%@AE@% must be specified as the
  3026. source operand containing the port number. A segment
  3027. override is not allowed. If %@AB@%INSB%@AE@% (bytes), %@AB@%INSW%@AE@% (words),
  3028. or%@AB@% INSD%@AE@% (doublewords on the 80386 only) is used, the
  3029. instruction determines the size of the data elements
  3030. to be received. No operands are allowed.%@NL@%
  3031. %@NL@%
  3032. %@4@%%@AB@%INS%@AE@% and its variations are usually used with the %@AB@%REP%@AE@% prefix.%@EH@%
  3033. Before the repeated instruction is executed, %@AB@%CX%@AE@% should
  3034. contain the number of elements to be received. In privileged
  3035. mode, a general protection fault is generated if %@AB@%INS%@AE@% is used
  3036. when the current protection level is greater than the value
  3037. of the IOPL flag.%@NL@%
  3038. %@NL@%
  3039. ───────────────────────────────────────────────────────────────────────────%@NL@%
  3040. ┌───────────┐%@NL@%
  3041. │ 0110110%@AI@%w%@AE@%  │%@NL@%
  3042. └───────────┘%@NL@%
  3043. ───────────────────┬─────────────────────────┬─────────────────────────────%@NL@%
  3044. %@AB@%INS%@AE@%  «%@AB@%ES%@AE@%:»%@AI@%dest%@AE@%,%@AB@%DX%@AE@%  │ rep   insb              │ 88/86     ─%@NL@%
  3045. %@AB@%INSB%@AE@%               │ ins   es:instr,dx       │   286     5%@NL@%
  3046. %@AB@%INSW%@AE@%               │ rep   insw              │   386     15,pm=9,29%@FN@%
  3047. %@FC@%1. First protected-mode timing: CPL ≤ IOPL. Second timing: CPL > IOPL.%@EF@%1%@NL@%
  3048. ───────────────────┴─────────────────────────┴─────────────────────────────%@NL@%
  3049. %@NL@%
  3050. %@NL@%
  3051. %@CR:62        @%%@NL@%
  3052. %@3@%%@AB@%INT%@AE@%%@CR:INT       @%%@EH@%%@QR:int@%%@NL@%
  3053. %@AB@%Interrupt%@AE@%%@QR:interrupt@%%@NL@%
  3054. ┌───┬───┬───┬───┬───┬───┬───┬───┬───┐%@NL@%
  3055. │ O │ D │ I │ T │ S │ Z │ A │ P │ C │%@NL@%
  3056. ├───┼───┼───┼───┼───┼───┼───┼───┼───┤%@NL@%
  3057. │   │   │ 0 │ 0 │   │   │   │   │   │%@NL@%
  3058. └───┴───┴───┴───┴───┴───┴───┴───┴───┘%@NL@%
  3059. %@NL@%
  3060. %@4@%Generates a software interrupt. An 8-bit constant operand%@EH@%
  3061. (0 to 255) specifies the interrupt procedure to be called.
  3062. The call is made by indexing the interrupt number into the
  3063. Interrupt Descriptor Table (IDT) starting at segment 0,
  3064. offset 0. In real mode, the IDT contains 4-byte pointers to
  3065. interrupt procedures. In privileged mode, the IDT contains
  3066. 8-byte pointers. When an interrupt is called in real mode,
  3067. the flags, %@AB@%CS%@AE@%, and %@AB@%IP%@AE@% are pushed onto the stack (in that
  3068. order) and the trap and interrupt flags are cleared. %@AB@%STI%@AE@% can
  3069. be used to restore interrupts. See Intel documentation and
  3070. the documentation for your operating system for details on
  3071. using and defining interrupts in privileged mode. To return
  3072. from an interrupt, use the %@AB@%IRET%@AE@% instruction.%@NL@%
  3073. %@NL@%
  3074. ───────────────────────────────────────────────────────────────────────────%@NL@%
  3075. ┌───────────┐%@NL@%
  3076. │ 11001101  │     %@AI@%data%@AE@% %@AI@%(1)%@AE@%%@NL@%
  3077. └───────────┘%@NL@%
  3078. ─────────────────┬─────────────────────────┬───────────────────────────────%@NL@%
  3079.                  │ int   25h               │ 88/86     51 (88=71)%@NL@%
  3080. %@AB@%INT  %@AI@%immed8%@AE@%      │                         │   286     23+m,pm=(40,78)+m%@FN@%
  3081. %@FC@%1. The first protected-mode timing is for interrupts to the same privilege
  3082. %@FC@%level. The second is for interrupts to a higher privilege level. Timings
  3083. %@FC@%for interrupts through task gates are not shown.%@EF@%1%@NL@%
  3084.                  │                         │   386     37,pm=59,99%@FN@%
  3085. %@FC@%1. The first protected-mode timing is for interrupts to the same privilege
  3086. %@FC@%level. The second is for interrupts to a higher privilege level. Timings
  3087. %@FC@%for interrupts through task gates are not shown.%@EF@%1%@NL@%
  3088. ─────────────────┴─────────────────────────┴───────────────────────────────%@NL@%
  3089. ┌───────────┐%@NL@%
  3090. │ 11001100  │%@NL@%
  3091. └───────────┘%@NL@%
  3092. ─────────────────┬─────────────────────────┬───────────────────────────────%@NL@%
  3093.                  │ int   3                 │ 88/86     52 (88=72)%@NL@%
  3094. %@AB@%INT  3%@AE@%           │                         │   286     23+m,pm=(40,78)+m%@FN@%
  3095. %@FC@%1. The first protected-mode timing is for interrupts to the same privilege
  3096. %@FC@%level. The second is for interrupts to a higher privilege level. Timings
  3097. %@FC@%for interrupts through task gates are not shown.%@EF@%1%@NL@%
  3098.                  │                         │   386     33,pm=59,99%@FN@%
  3099. %@FC@%1. The first protected-mode timing is for interrupts to the same privilege
  3100. %@FC@%level. The second is for interrupts to a higher privilege level. Timings
  3101. %@FC@%for interrupts through task gates are not shown.%@EF@%1%@NL@%
  3102. ─────────────────┴─────────────────────────┴───────────────────────────────%@NL@%
  3103. %@NL@%
  3104. %@NL@%
  3105. %@CR:63        @%%@NL@%
  3106. %@3@%%@AB@%INTO%@AE@%%@CR:INTO      @%%@EH@%%@QR:into@%%@NL@%
  3107. %@AB@%Interrupt on Overflow%@AE@%%@QR:interrupt on overflow@%%@QR:overflow interrupt@%%@NL@%
  3108. ┌───┬───┬───┬───┬───┬───┬───┬───┬───┐%@NL@%
  3109. │ O │ D │ I │ T │ S │ Z │ A │ P │ C │%@NL@%
  3110. ├───┼───┼───┼───┼───┼───┼───┼───┼───┤%@NL@%
  3111. │   │   │ ± │ ± │   │   │   │   │   │%@NL@%
  3112. └───┴───┴───┴───┴───┴───┴───┴───┴───┘%@NL@%
  3113. %@NL@%
  3114. %@4@%Generates interrupt 4 if the overflow flag is set. The%@EH@%
  3115. default DOS behavior for interrupt 4 is to return without
  3116. taking any action. You must define an interrupt procedure
  3117. for interrupt 4 in order for %@AB@%INTO%@AE@% to have any effect.%@NL@%
  3118. %@NL@%
  3119. ───────────────────────────────────────────────────────────────────────────%@NL@%
  3120. ┌───────────┐%@NL@%
  3121. │ 11001110  │%@NL@%
  3122. └───────────┘%@NL@%
  3123. ─────────────────┬──────────────────┬──────────────────────────────────────%@NL@%
  3124.                  │ into             │ 88/86     53 (88=73),noj=4%@NL@%
  3125. %@AB@%INTO%@AE@%             │                  │   286     24+m,noj=3,pm=(40,78)+m%@FN@%
  3126. %@FC@%1. The first protected-mode timing is for interrupts to the same privilege
  3127. %@FC@%level. The second is for interrupts to a higher privilege level. Timings
  3128. %@FC@%for interrupts through task gates are not shown.%@EF@%1%@NL@%
  3129.                  │                  │   386     35,noj=3,pm=59,99%@FN@%
  3130. %@FC@%1. The first protected-mode timing is for interrupts to the same privilege
  3131. %@FC@%level. The second is for interrupts to a higher privilege level. Timings
  3132. %@FC@%for interrupts through task gates are not shown.%@EF@%1%@NL@%
  3133. ─────────────────┴──────────────────┴──────────────────────────────────────%@NL@%
  3134. %@NL@%
  3135. %@NL@%
  3136. %@NL@%
  3137. %@3@%%@AB@%IRET/IRETD%@AE@%%@CR:IRET      @%%@EH@%%@QR:iret@%%@QR:iretd@%%@NL@%
  3138. %@AB@%Interrupt Return%@AE@%%@QR:interrupt return@%%@NL@%
  3139. ┌───┬───┬───┬───┬───┬───┬───┬───┬───┐%@NL@%
  3140. │ O │ D │ I │ T │ S │ Z │ A │ P │ C │%@NL@%
  3141. ├───┼───┼───┼───┼───┼───┼───┼───┼───┤%@NL@%
  3142. │ ± │ ± │ ± │ ± │ ± │ ± │ ± │ ± │ ± │%@NL@%
  3143. └───┴───┴───┴───┴───┴───┴───┴───┴───┘%@NL@%
  3144. %@NL@%
  3145. %@4@%Returns control from an interrupt procedure to the%@EH@%
  3146. interrupted code. In real mode, the %@AB@%IRET%@AE@% instruction pops
  3147. %@AB@%IP%@AE@%, %@AB@%CS%@AE@%, and the flags (in that order) and resumes execution.
  3148. See Intel documentation for details on %@AB@%IRET%@AE@% operation in
  3149. privileged mode. On the 80386, the %@AB@%IRETD%@AE@% instruction should
  3150. be used to pop a 32-bit instruction pointer when returning
  3151. from an interrupt called from a 32-bit segment.%@NL@%
  3152. %@NL@%
  3153. ───────────────────────────────────────────────────────────────────────────%@NL@%
  3154. ┌───────────┐%@NL@%
  3155. │ 11001111  │%@NL@%
  3156. └───────────┘%@NL@%
  3157. ─────────────────┬──────────────────┬──────────────────────────────────────%@NL@%
  3158. %@AB@%IRET%@AE@%             │ iret             │ 88/86     32 (88=44)%@NL@%
  3159. %@AB@%IRETD%@AE@%%@FN@%
  3160. %@FC@%1. The first protected-mode timing is for interrupts to the same privilege
  3161. %@FC@%level within a task. The second is for interrupts to a higher privilege
  3162. %@FC@%level within a task. Timings for interrupts through task gates are not
  3163. %@FC@%shown.
  3164. %@FC@%2. 80386 only.%@EF@%2          │                  │   286     17+m,pm=(31,55)+m%@FN@%
  3165. %@FC@%1. The first protected-mode timing is for interrupts to the same privilege
  3166. %@FC@%level within a task. The second is for interrupts to a higher privilege
  3167. %@FC@%level within a task. Timings for interrupts through task gates are not
  3168. %@FC@%shown.
  3169. %@FC@%2. 80386 only.%@EF@%1%@NL@%
  3170.                  │                  │   386     22,pm=38,82%@FN@%
  3171. %@FC@%1. The first protected-mode timing is for interrupts to the same privilege
  3172. %@FC@%level within a task. The second is for interrupts to a higher privilege
  3173. %@FC@%level within a task. Timings for interrupts through task gates are not
  3174. %@FC@%shown.%@EF@%1%@NL@%
  3175. ─────────────────┴──────────────────┴──────────────────────────────────────%@NL@%
  3176. %@NL@%
  3177. %@NL@%
  3178. %@CR:64        @%%@NL@%
  3179. %@3@%%@AB@%J%@AI@%condition%@AE@%%@CR:Jcondition@%%@EH@%%@QR:j@%%@NL@%
  3180. %@AB@%Jump Conditionally%@AE@%%@QR:jump@%%@QR:jump conditionally@%%@NL@%
  3181. ┌───┬───┬───┬───┬───┬───┬───┬───┬───┐%@NL@%
  3182. │ O │ D │ I │ T │ S │ Z │ A │ P │ C │%@NL@%
  3183. ├───┼───┼───┼───┼───┼───┼───┼───┼───┤%@NL@%
  3184. │   │   │   │   │   │   │   │   │   │%@NL@%
  3185. └───┴───┴───┴───┴───┴───┴───┴───┴───┘%@NL@%
  3186. %@NL@%
  3187. %@4@%Transfers execution to the specified label if the flags %@EH@%
  3188. condition is true. The condition is tested by checking
  3189. the flags shown in the table on the following page. If the
  3190. condition is false, then no jump is taken and program execution
  3191. continues at the next instruction. On the 8088-80286 processors,
  3192. the label given as the operand must be short (between -128 and
  3193. 127 bytes from the instruction following the jump). On the
  3194. 80386, the label is near (between -32768 to +32767 bytes)
  3195. by default, but a short jump can be specified with the
  3196. %@AB@%SHORT %@AE@%operator.%@NL@%
  3197. %@NL@%
  3198. ───────────────────────────────────────────────────────────────────────────%@NL@%
  3199. ┌───────────┐%@NL@%
  3200. │ 0111%@AI@%cond%@AE@%  │     %@AI@%disp%@AE@% %@AI@%(1)%@AE@%%@NL@%
  3201. └───────────┘%@NL@%
  3202. ────────────────────┬─────────────────────────┬────────────────────────────%@NL@%
  3203.                     │ jg    bigger            │ 88/86     16,noj=4%@NL@%
  3204. %@AB@%J%@AI@%condition%@AE@%  %@AI@%label%@AE@%   │ jo    SHORT too_big     │   286     7+m,noj=3%@NL@%
  3205.                     │ jpe   p_even            │   386     7+m,noj=3%@NL@%
  3206. ────────────────────┴─────────────────────────┴────────────────────────────%@NL@%
  3207. ┌───────────┐  ┌───────────┐%@NL@%
  3208. │ 00001111  │  │ 1000%@AI@%cond%@AE@%  │     %@AI@%disp%@AE@% %@AI@%(2)%@AE@%%@NL@%
  3209. └───────────┘  └───────────┘%@NL@%
  3210. ─────────────────────┬─────────────────────────┬───────────────────────────%@NL@%
  3211.                      │ je    next              │ 88/86     ─%@NL@%
  3212. %@AB@%J%@AI@%condition%@AE@%   %@AI@%label%@AE@%%@FN@%
  3213. %@FC@%1. Near labels are only available on the 80386. They are
  3214. %@FC@%the default.%@EF@%1 │ jnae  lesser            │   286     ─%@NL@%
  3215.                      │ js    negative          │   386     7+m,noj=3%@NL@%
  3216. ─────────────────────┴─────────────────────────┴───────────────────────────%@NL@%
  3217. %@NL@%
  3218. %@CR:65        @%%@NL@%
  3219. %@AB@%JUMP CONDITIONS%@AE@%%@QR:jump conditions@%%@NL@%
  3220. %@NL@%
  3221. %@TH: 056 02747 01 16 10 16 34 @%%@AB@%Opcode          Mnemonic  Flags Checked   Description%@AE@%───────────────────────────────────────────────────────────────────────────┌───────────┐│ %@AI@%size%@AE@% 0010 │   %@AB@%JB/JNAE   %@AE@%CF=1            Jump if below/not above or equal └───────────┘                             (unsigned comparisons)┌───────────┐│ %@AI@%size%@AE@% 0011 │   %@AB@%JAE/JNB   %@AE@%CF=0            Jump if above or equal/not below └───────────┘                             (unsigned comparisons)┌───────────┐│ %@AI@%size%@AE@% 0110 │   %@AB@%JBE/JNA   %@AE@%CF=1 or ZF=1    Jump if below or equal/not above └───────────┘                             (unsigned comparisons)┌───────────┐│ %@AI@%size%@AE@% 0111 │   %@AB@%JA/JNBE   %@AE@%CF=0 and ZF=0   Jump if above/not below or equal └───────────┘                             (unsigned comparisons)┌───────────┐│ %@AI@%size%@AE@% 0100 │   %@AB@%JE/JZ     %@AE@%ZF=1            Jump if equal (zero)└───────────┘┌───────────┐│ %@AI@%size%@AE@% 0101 │   %@AB@%JNE/JNZ   %@AE@%ZF=0            Jump if not equal (not zero)└───────────┘┌───────────┐│ %@AI@%size%@AE@% 1100 │   %@AB@%JL/JNGE   %@AE@%SF¡OF           Jump if less/not greater or equal└───────────┘                             (signed comparisons)┌───────────┐│ %@AI@%size%@AE@% 1101 │   %@AB@%JGE/JNL   %@AE@%SF=OF           Jump if greater or equal/not less └───────────┘                             (signed comparisons)┌───────────┐│ %@AI@%size%@AE@% 1110 │   %@AB@%JLE/JNG   %@AE@%ZF=1 or SF=OF   Jump if less or equal/not greater└───────────┘                             (signed comparisons)┌───────────┐│ %@AI@%size%@AE@% 1111 │   %@AB@%JG/JNLE   %@AE@%ZF=0 or SF=OF   Jump if greater/not less or equal└───────────┘                             (signed comparisons)┌───────────┐│ %@AI@%size%@AE@% 1000 │   %@AB@%JS%@AE@%        SF=1            Jump if sign└───────────┘┌───────────┐│ %@AI@%size%@AE@% 1001 │   %@AB@%JNS%@AE@%       SF=0            Jump if not sign└───────────┘┌───────────┐│ %@AI@%size%@AE@% 0010 │   %@AB@%JC%@AE@%        CF=1            Jump if carry└───────────┘┌───────────┐│ %@AI@%size%@AE@% 0011 │   %@AB@%JNC%@AE@%       CF=0            Jump if not carry└───────────┘┌───────────┐│ %@AI@%size%@AE@% 0000 │   %@AB@%JO%@AE@%        OF=1            Jump if overflow└───────────┘┌───────────┐│ %@AI@%size%@AE@% 0001 │   %@AB@%JNO%@AE@%       OF=0            Jump if not overflow└───────────┘┌───────────┐│ %@AI@%size%@AE@% 1010 │   %@AB@%JP/JPE%@AE@%    PF=1            Jump if parity/parity even└───────────┘┌───────────┐│ %@AI@%size%@AE@% 1011 │   %@AB@%JNP/JPO%@AE@%   PF=0            Jump if no parity/parity odd└───────────┘%@TE: 056 02747 01 16 10 16 34 @%
  3222. %@NL@%
  3223. Note: The size bits are 0111 for short jumps or 1000 for 80386 near jumps.%@NL@%
  3224. %@NL@%
  3225. %@NL@%
  3226. %@CR:66        @%%@NL@%
  3227. %@3@%%@AB@%JCXZ/JECXZ%@AE@%%@CR:JCXZ      @%%@EH@%%@QR:jcxz@%%@QR:jecxz@%%@NL@%
  3228. %@AB@%Jump if CX is Zero%@AE@%%@QR:jump if cx is zero@%%@NL@%
  3229. ┌───┬───┬───┬───┬───┬───┬───┬───┬───┐%@NL@%
  3230. │ O │ D │ I │ T │ S │ Z │ A │ P │ C │%@NL@%
  3231. ├───┼───┼───┼───┼───┼───┼───┼───┼───┤%@NL@%
  3232. │   │   │   │   │   │   │   │   │   │%@NL@%
  3233. └───┴───┴───┴───┴───┴───┴───┴───┴───┘%@NL@%
  3234. %@NL@%
  3235. %@4@%Transfers program execution to the specified label if %@AB@%CX %@AE@%%@EH@%
  3236. is 0. On the 80386, %@AB@%JECXZ %@AE@%can be used to jump if %@AB@%ECX %@AE@%is 0.
  3237. If the count register is not 0, execution continues at the
  3238. next instruction. The label given as the operand must be
  3239. short (between -128 and 127 bytes from the instruction
  3240. following the jump).%@NL@%
  3241. %@NL@%
  3242. ┌───────────┐%@NL@%
  3243. │ 11100011  │     %@AI@%disp%@AE@% %@AI@%(1)%@AE@%%@NL@%
  3244. └───────────┘%@NL@%
  3245. ─────────────────┬─────────────────────────┬───────────────────────────────%@NL@%
  3246. %@AB@%JCXZ  %@AI@%label%@AE@%      │ jcxz  notfound          │ 88/86     18,noj=6%@NL@%
  3247. %@AB@%JECXZ  %@AI@%label%@AE@%%@FN@%
  3248. %@FC@%1. 80386 only.%@EF@%1   │                         │   286     8+m,noj=4%@NL@%
  3249.                  │                         │   386     9+m,noj=5%@NL@%
  3250. ─────────────────┴─────────────────────────┴───────────────────────────────%@NL@%
  3251. %@NL@%
  3252. %@NL@%
  3253. %@CR:67        @%%@NL@%
  3254. %@3@%%@AB@%JMP%@AE@%%@CR:JMP       @%%@EH@%%@QR:jmp@%%@NL@%
  3255. %@AB@%Jump Unconditionally%@AE@%%@QR:jump unconditionally@%%@QR:jump@%%@NL@%
  3256. ┌───┬───┬───┬───┬───┬───┬───┬───┬───┐%@NL@%
  3257. │ O │ D │ I │ T │ S │ Z │ A │ P │ C │%@NL@%
  3258. ├───┼───┼───┼───┼───┼───┼───┼───┼───┤%@NL@%
  3259. │   │   │   │   │   │   │   │   │   │%@NL@%
  3260. └───┴───┴───┴───┴───┴───┴───┴───┴───┘%@NL@%
  3261. %@NL@%
  3262. %@4@%Transfers program execution to the address specified by the%@EH@%
  3263. destination operand. By default, jumps are near (between -32768
  3264. and 32767 bytes from the instruction following the jump), but
  3265. you can use an override to make them short (between -128 and 127
  3266. bytes) or far (in a different code segment). With near and short
  3267. jumps, the operand specifies a new %@AB@%IP%@AE@% address. With far jumps,
  3268. the operand specifies new %@AB@%IP %@AE@%and %@AB@%CS %@AE@%addresses.%@NL@%
  3269. %@NL@%
  3270. ───────────────────────────────────────────────────────────────────────────%@NL@%
  3271. ┌───────────┐%@NL@%
  3272. │ 11101011  │     %@AI@%disp%@AE@% %@AI@%(1)%@AE@%%@NL@%
  3273. └───────────┘%@NL@%
  3274. ─────────────────┬─────────────────────────┬───────────────────────────────%@NL@%
  3275.                  │ jmp   SHORT exit        │ 88/86     15%@NL@%
  3276. %@AB@%JMP  %@AI@%label%@AE@%       │                         │   286     7+m%@NL@%
  3277.                  │                         │   386     7+m%@NL@%
  3278. ─────────────────┴─────────────────────────┴───────────────────────────────%@NL@%
  3279. ┌───────────┐%@NL@%
  3280. │ 11101001  │     %@AI@%disp%@AE@% %@AI@%(2%@AE@%%@FN@%
  3281. %@FC@%1. On the 80386, the displacement can be four bytes for near
  3282. %@FC@%jumps or six bytes for far jumps.%@EF@%1%@AI@%)%@AE@%%@NL@%
  3283. └───────────┘%@NL@%
  3284. ─────────────────┬─────────────────────────┬───────────────────────────────%@NL@%
  3285.                  │ jmp   close             │ 88/86     15%@NL@%
  3286. %@AB@%JMP  %@AI@%label%@AE@%       │ jmp   NEAR PTR distant  │   286     7+m%@NL@%
  3287.                  │                         │   386     7+m%@NL@%
  3288. ─────────────────┴─────────────────────────┴───────────────────────────────%@NL@%
  3289. ┌───────────┐%@NL@%
  3290. │ 11101010  │     %@AI@%disp%@AE@% %@AI@%(4%@AE@%%@FN@%
  3291. %@FC@%1. On the 80386, the displacement can be four bytes for near
  3292. %@FC@%jumps or six bytes for far jumps.%@EF@%1%@AI@%)%@AE@%%@NL@%
  3293. └───────────┘%@NL@%
  3294. ─────────────────┬─────────────────────────┬───────────────────────────────%@NL@%
  3295.                  │ jmp   FAR PTR close     │ 88/86     15%@NL@%
  3296. %@AB@%JMP  %@AI@%label%@AE@%       │ jmp   distant           │   286     11+m,pm=23+m%@FN@%
  3297. %@FC@%2. Timings for jumps through call or task gates are not shown,
  3298. %@FC@%since they are normally used only in operating systems.%@EF@%2%@NL@%
  3299.                  │                         │   386     12+m,pm=27+m%@FN@%
  3300. %@FC@%2. Timings for jumps through call or task gates are not shown,
  3301. %@FC@%since they are normally used only in operating systems.%@EF@%2%@NL@%
  3302. ─────────────────┴─────────────────────────┴───────────────────────────────%@NL@%
  3303. ┌───────────┐ ┌─────────────┐%@NL@%
  3304. │ 11111111  │ │ %@AI@%mod%@AE@%,100,%@AI@%r/m%@AE@% │%@NL@%
  3305. └───────────┘ └─────────────┘%@NL@%
  3306. ─────────────────┬─────────────────────────┬───────────────────────────────%@NL@%
  3307. %@AB@%JMP  %@AI@%reg16%@AE@%       │ jmp   ax                │ 88/86     11%@NL@%
  3308. %@AB@%JMP  %@AI@%reg32%@AE@%%@FN@%
  3309. %@FC@%3. 80386 only. You can use %@AB@%DWORD PTR %@AE@%to specify
  3310. %@FC@%near register-indirect jumps or %@AB@%FWORD PTR %@AE@%to specify
  3311. %@FC@%far register-indirect jumps.%@EF@%3     │                         │   286     7+m %@NL@%
  3312.                  │                         │   386     7+m%@NL@%
  3313. ─────────────────┼─────────────────────────┼───────────────────────────────%@NL@%
  3314. %@AB@%JMP  %@AI@%mem16%@AE@%       │ jmp   WORD [bx]         │ 88/86     18+EA%@NL@%
  3315. %@AB@%JMP  %@AI@%mem32%@AE@%%@FN@%
  3316. %@FC@%3. 80386 only. You can use %@AB@%DWORD PTR %@AE@%to specify
  3317. %@FC@%near register-indirect jumps or %@AB@%FWORD PTR %@AE@%to specify
  3318. %@FC@%far register-indirect jumps.%@EF@%3     │ jmp   table[di]         │   286     11+m%@NL@%
  3319.                  │ jmp   DWORD [si]        │   386     10+m%@NL@%
  3320. ─────────────────┴─────────────────────────┴───────────────────────────────%@NL@%
  3321. ┌───────────┐  ┌─────────────┐%@NL@%
  3322. │ 11111111  │  │ %@AI@%mod%@AB@%,101,%@AI@%r/m%@AE@% │%@NL@%
  3323. └───────────┘  └─────────────┘%@NL@%
  3324. ─────────────────┬─────────────────────────┬───────────────────────────────%@NL@%
  3325. %@AB@%JMP  %@AI@%mem32%@AE@%       │ jmp   fpointer[si]      │ 88/86     24+EA%@NL@%
  3326. %@AB@%JMP  %@AI@%mem48%@AE@%%@FN@%
  3327. %@FC@%3. 80386 only. You can use %@AB@%DWORD PTR %@AE@%to specify
  3328. %@FC@%near register-indirect jumps or %@AB@%FWORD PTR %@AE@%to specify
  3329. %@FC@%far register-indirect jumps.%@EF@%3     │ jmp   DWORD PTR [bx]    │   286     15+m,pm=26+m%@NL@%
  3330.                  │ jmp   FWORD PTR [di]    │   386     12+m,pm=27+m%@NL@%
  3331. ─────────────────┴─────────────────────────┴───────────────────────────────%@NL@%
  3332. %@NL@%
  3333. %@NL@%
  3334. %@CR:68        @%%@NL@%
  3335. %@3@%%@AB@%LAHF%@AE@%%@CR:LAHF      @%%@EH@%%@QR:lahf@%%@NL@%
  3336. %@AB@%Load Flags into AH Register%@AE@%%@QR:load flags@%%@NL@%
  3337. ┌───┬───┬───┬───┬───┬───┬───┬───┬───┐%@NL@%
  3338. │ O │ D │ I │ T │ S │ Z │ A │ P │ C │%@NL@%
  3339. ├───┼───┼───┼───┼───┼───┼───┼───┼───┤%@NL@%
  3340. │   │   │   │   │   │   │   │   │   │%@NL@%
  3341. └───┴───┴───┴───┴───┴───┴───┴───┴───┘%@NL@%
  3342. %@NL@%
  3343. %@4@%Transfers bits 0 to 7 of the flags register to %@AB@%AH%@AE@%. This %@EH@%
  3344. includes the carry, parity, auxiliary carry, zero, and sign
  3345. flags, but not the trap, interrupt, direction, or overflow
  3346. flags.%@NL@%
  3347. %@NL@%
  3348. ───────────────────────────────────────────────────────────────────────────%@NL@%
  3349. ┌───────────┐%@NL@%
  3350. │ 10011111  │%@NL@%
  3351. └───────────┘%@NL@%
  3352. ─────────────────┬─────────────────────────┬───────────────────────────────%@NL@%
  3353.                  │ lahf                    │ 88/86     4%@NL@%
  3354. %@AB@%LAHF%@AE@%             │                         │   286     2%@NL@%
  3355.                  │                         │   386     2%@NL@%
  3356. ─────────────────┴─────────────────────────┴───────────────────────────────%@NL@%
  3357. %@NL@%
  3358. %@NL@%
  3359. %@NL@%
  3360. %@3@%%@AB@%LAR%@AE@%%@CR:LAR       @%%@EH@%%@QR:lar@%%@NL@%
  3361. %@AB@%Load Access Rights%@AE@%%@QR:load access rights@%%@QR:load access@%%@QR:load@%%@NL@%
  3362. %@AB@%80286/386 Protected Only%@AE@%%@NL@%
  3363. ┌───┬───┬───┬───┬───┬───┬───┬───┬───┐%@NL@%
  3364. │ O │ D │ I │ T │ S │ Z │ A │ P │ C │%@NL@%
  3365. ├───┼───┼───┼───┼───┼───┼───┼───┼───┤%@NL@%
  3366. │   │   │   │   │   │ ± │   │   │   │%@NL@%
  3367. └───┴───┴───┴───┴───┴───┴───┴───┴───┘%@NL@%
  3368. %@NL@%
  3369. %@4@%Loads the access rights of a selector into a specified%@EH@%
  3370. register. This instruction is only available in privileged mode.
  3371. The source operand must be a register or memory operand
  3372. containing a selector. The destination operand must be a
  3373. register that will receive the access rights if the selector
  3374. is valid and visible at the current privilege level. The zero
  3375. flag is set if the access rights are transferred, or
  3376. cleared if they are not. See Intel documentation for details on
  3377. selectors, access rights, and other privileged-mode concepts.%@NL@%
  3378. %@NL@%
  3379. ───────────────────────────────────────────────────────────────────────────%@NL@%
  3380. ┌───────────┐  ┌───────────┐  ┌───────────────┐%@NL@%
  3381. │ 00001111  │  │ 00000010  │  │ %@AI@%mod%@AE@%, %@AI@%reg%@AE@%, %@AI@%r/m%@AE@% │     %@AI@%disp%@AE@% %@AI@%(0,%@AE@% %@AI@%2,%@AE@% %@AI@%or%@AE@% %@AI@%4)%@AE@%%@NL@%
  3382. └───────────┘  └───────────┘  └───────────────┘%@NL@%
  3383. ───────────────────┼──────────────────────────┬────────────────────────────%@NL@%
  3384. %@AB@%LAR  %@AI@%reg16,reg16%@AE@%   │ lar   ax,bx              │ 88/86     ─%@NL@%
  3385. %@AB@%LAR  %@AI@%reg32,reg32%@AE@%%@FN@%
  3386. %@FC@%1. 80386 only.%@EF@%1 │                          │   286     14%@NL@%
  3387.                    │                          │   386     15%@NL@%
  3388. ───────────────────┼──────────────────────────┼────────────────────────────%@NL@%
  3389. %@AB@%LAR  %@AI@%reg16,mem16%@AE@%   │ lar   cx,selector        │ 88/86     ─%@NL@%
  3390. %@AB@%LAR  %@AI@%reg32,mem32%@AE@%%@FN@%
  3391. %@FC@%1. 80386 only.%@EF@%1 │                          │   286     16%@NL@%
  3392.                    │                          │   386     16%@NL@%
  3393. ───────────────────┴──────────────────────────┴────────────────────────────%@NL@%
  3394. %@NL@%
  3395. %@NL@%
  3396. %@CR:69        @%%@NL@%
  3397. %@3@%%@AB@%LDS/LES/LFS/LGS/LSS%@AE@%%@CR:LDS       @%%@EH@%%@QR:lds@%%@QR:les@%%@QR:lfs@%%@QR:lgs@%%@QR:lss@%%@NL@%
  3398. %@AB@%Load Far Pointer%@AE@%%@QR:load far pointer@%%@QR:far pointer@%%@QR:load pointer@%%@NL@%
  3399. ┌───┬───┬───┬───┬───┬───┬───┬───┬───┐%@NL@%
  3400. │ O │ D │ I │ T │ S │ Z │ A │ P │ C │%@NL@%
  3401. ├───┼───┼───┼───┼───┼───┼───┼───┼───┤%@NL@%
  3402. │   │   │   │   │   │   │   │   │   │%@NL@%
  3403. └───┴───┴───┴───┴───┴───┴───┴───┴───┘%@NL@%
  3404. %@NL@%
  3405. %@4@%Reads and stores the far pointer specified by the%@EH@%
  3406. source memory operand. The pointer's segment value is
  3407. stored in the segment register segment specified by the
  3408. instruction name. The offset value is stored in the
  3409. register specified by the destination operand. The
  3410. %@AB@%LDS %@AE@%and %@AB@%LES%@AE@% instructions are available on all
  3411. processors. The %@AB@%LFS%@AE@%, %@AB@%LGS%@AE@%, and %@AB@%LSS%@AE@% instructions are
  3412. available only on the 80386. On the 80386, the size
  3413. of the source and destination operand must match the
  3414. current segment word size.%@NL@%
  3415. %@NL@%
  3416. ───────────────────────────────────────────────────────────────────────────%@NL@%
  3417. ┌───────────┐  ┌───────────────┐%@NL@%
  3418. │ 11000101  │  │ %@AI@%mod%@AE@%, %@AI@%reg%@AE@%, %@AI@%r/m%@AE@% │     %@AI@%disp%@AE@% %@AI@%(2)%@AE@%%@NL@%
  3419. └───────────┘  └───────────────┘%@NL@%
  3420. ─────────────────┬─────────────────────────┬───────────────────────────────%@NL@%
  3421.                  │ lds   si,fpointer       │ 88/86     16+EA (88=24+EA)%@NL@%
  3422. %@AB@%LDS  %@AI@%reg,mem%@AE@%     │                         │   286     7,pm=21%@NL@%
  3423.                  │                         │   386     7,pm=22%@NL@%
  3424. ─────────────────┴─────────────────────────┴───────────────────────────────%@NL@%
  3425. ┌───────────┐  ┌───────────────┐%@NL@%
  3426. │ 11000100  │  │ %@AI@%mod%@AE@%, %@AI@%reg%@AE@%, %@AI@%r/m%@AE@% │     %@AI@%disp%@AE@% %@AI@%(2)%@AE@%%@NL@%
  3427. └───────────┘  └───────────────┘%@NL@%
  3428. ─────────────────┬─────────────────────────┬───────────────────────────────%@NL@%
  3429.                  │ les   di,fpointer       │ 88/86     16+EA (88=24+EA)%@NL@%
  3430. %@AB@%LES  %@AI@%reg,mem%@AE@%     │                         │   286     7,pm=21%@NL@%
  3431.                  │                         │   386     7,pm=22%@NL@%
  3432. ─────────────────┴─────────────────────────┴───────────────────────────────%@NL@%
  3433. ┌───────────┐  ┌───────────┐  ┌───────────────┐%@NL@%
  3434. │ 00001111  │  │ 10110100  │  │ %@AI@%mod%@AE@%, %@AI@%reg%@AE@%, %@AI@%r/m%@AE@% │     %@AI@%disp%@AE@% %@AI@%(2%@AE@% %@AI@%or%@AE@% %@AI@%4)%@AE@%%@NL@%
  3435. └───────────┘  └───────────┘  └───────────────┘%@NL@%
  3436. ─────────────────┬─────────────────────────┬───────────────────────────────%@NL@%
  3437.                  │ lfs   edi,fpointer      │ 88/86     ─%@NL@%
  3438. %@AB@%LFS  %@AI@%reg,mem%@AE@%     │                         │   286     ─%@NL@%
  3439.                  │                         │   386     7,pm=25%@NL@%
  3440. ─────────────────┴─────────────────────────┴───────────────────────────────%@NL@%
  3441. ┌───────────┐  ┌───────────┐  ┌───────────────┐%@NL@%
  3442. │ 00001111  │  │ 10110101  │  │ %@AI@%mod%@AE@%, %@AI@%reg%@AE@%, %@AI@%r/m%@AE@% │     %@AI@%disp%@AE@% %@AI@%(2%@AE@% %@AI@%or%@AE@% %@AI@%4)%@AE@%%@NL@%
  3443. └───────────┘  └───────────┘  └───────────────┘%@NL@%
  3444. ─────────────────┬─────────────────────────┬───────────────────────────────%@NL@%
  3445.                  │ lgs   bx,fpointer       │ 88/86     ─%@NL@%
  3446. %@AB@%LGS  %@AI@%reg,mem%@AE@%     │                         │   286     ─%@NL@%
  3447.                  │                         │   386     7,pm=25%@NL@%
  3448. ─────────────────┴─────────────────────────┴───────────────────────────────%@NL@%
  3449. ┌───────────┐  ┌───────────┐  ┌───────────────┐%@NL@%
  3450. │ 00001111  │  │ 10110010  │  │ %@AI@%mod%@AE@%, %@AI@%reg%@AE@%, %@AI@%r/m%@AE@% │     %@AI@%disp%@AE@% %@AI@%(2%@AE@% %@AI@%or%@AE@% %@AI@%4)%@AE@%%@NL@%
  3451. └───────────┘  └───────────┘  └───────────────┘%@NL@%
  3452. ─────────────────┬─────────────────────────┬───────────────────────────────%@NL@%
  3453.                  │ lss   bp,fpointer       │ 88/86     ─%@NL@%
  3454. %@AB@%LSS  %@AI@%reg,mem%@AE@%     │                         │   286     ─%@NL@%
  3455.                  │                         │   386     7,pm=22%@NL@%
  3456. ─────────────────┴─────────────────────────┴───────────────────────────────%@NL@%
  3457. %@NL@%
  3458. %@NL@%
  3459. %@CR:70        @%%@NL@%
  3460. %@3@%%@AB@%LEA%@AE@%%@CR:LEA       @%%@EH@%%@QR:lea@%%@NL@%
  3461. %@AB@%Load Effective Address%@AE@%%@QR:load effective address@%%@QR:load address@%%@NL@%
  3462. ┌───┬───┬───┬───┬───┬───┬───┬───┬───┐%@NL@%
  3463. │ O │ D │ I │ T │ S │ Z │ A │ P │ C │%@NL@%
  3464. ├───┼───┼───┼───┼───┼───┼───┼───┼───┤%@NL@%
  3465. │   │   │   │   │   │   │   │   │   │%@NL@%
  3466. └───┴───┴───┴───┴───┴───┴───┴───┴───┘%@NL@%
  3467. %@NL@%
  3468. %@4@%Calculates the effective address (offset) of the source%@EH@%
  3469. memory operand and stores the result into the destination
  3470. register.%@NL@%
  3471. %@NL@%
  3472. ───────────────────────────────────────────────────────────────────────────%@NL@%
  3473. ┌───────────┐ ┌───────────────┐%@NL@%
  3474. │ 10001101  │ │ %@AI@%mod%@AE@%, %@AI@%reg%@AE@%, %@AI@%r/m%@AE@% │     %@AI@%disp%@AE@% %@AI@%(2)%@AE@%%@NL@%
  3475. └───────────┘ └───────────────┘%@NL@%
  3476. ─────────────────┬─────────────────────────┬───────────────────────────────%@NL@%
  3477.                  │ lea   bx,npointer       │ 88/86     2+EA%@NL@%
  3478. %@AB@%LEA  %@AI@%reg,mem%@AE@%     │                         │   286     3%@NL@%
  3479.                  │                         │   386     2%@NL@%
  3480. ─────────────────┴─────────────────────────┴───────────────────────────────%@NL@%
  3481. %@NL@%
  3482. %@NL@%
  3483. %@NL@%
  3484. %@3@%%@AB@%LEAVE%@AE@%%@CR:LEAVE     @%%@EH@%%@QR:leave@%%@NL@%
  3485. %@AB@%High Level Procedure Exit%@AE@%%@QR:exit@%%@QR:hi level exit@%%@QR:high level exit@%%@NL@%
  3486. %@AB@%80186/286/386 Only%@AE@%%@NL@%
  3487. ┌───┬───┬───┬───┬───┬───┬───┬───┬───┐%@NL@%
  3488. │ O │ D │ I │ T │ S │ Z │ A │ P │ C │%@NL@%
  3489. ├───┼───┼───┼───┼───┼───┼───┼───┼───┤%@NL@%
  3490. │   │   │   │   │   │   │   │   │   │%@NL@%
  3491. └───┴───┴───┴───┴───┴───┴───┴───┴───┘%@NL@%
  3492. %@NL@%
  3493. %@4@%Terminates the stack frame of a procedure. %@AB@%LEAVE %@AE@% reverses%@EH@%
  3494. the action of a previous %@AB@%ENTER %@AE@%instruction by restoring
  3495. %@AB@%SP %@AE@%and %@AB@%BP %@AE@%to the values they had before the procedure
  3496. stack frame was initialized.%@NL@%
  3497. %@NL@%
  3498. ───────────────────────────────────────────────────────────────────────────%@NL@%
  3499. ┌───────────┐%@NL@%
  3500. │ 11001001  │%@NL@%
  3501. └───────────┘%@NL@%
  3502. ─────────────────┬─────────────────────────┬───────────────────────────────%@NL@%
  3503.                  │ leave                   │ 88/86     ─%@NL@%
  3504. %@AB@%LEAVE%@AE@%            │                         │   286     5%@NL@%
  3505.                  │                         │   386     4%@NL@%
  3506. ─────────────────┴─────────────────────────┴───────────────────────────────%@NL@%
  3507. %@NL@%
  3508. %@NL@%
  3509. %@NL@%
  3510. %@3@%%@AB@%LES/LFS/LGS%@AE@%%@CR:LES       @%%@EH@%%@QR:les@%%@QR:lfs@%%@QR:lgs@%%@NL@%
  3511. %@AB@%Load Far Pointer to Extra Segment%@AE@%%@QR:load far pointer@%%@QR:extra segment@%%@NL@%
  3512. %@NL@%
  3513. %@4@%See %@AB@%LDS%@AE@%%@BO:     35607@%.%@EH@%%@NL@%
  3514. %@NL@%
  3515. %@NL@%
  3516. %@CR:71        @%%@NL@%
  3517. %@3@%%@AB@%LGDT/LIDT/LLDT%@AE@%%@CR:LGDT      @%%@EH@%%@QR:lgdt@%%@QR:lidt@%%@QR:lldt@%%@NL@%
  3518. %@AB@%Load Descriptor Table%@AE@%%@QR:load descriptor table@%%@QR:descriptor table@%%@QR:load table@%%@NL@%
  3519. %@AB@%80286/386 Privileged Only%@AE@%%@NL@%
  3520. ┌───┬───┬───┬───┬───┬───┬───┬───┬───┐%@NL@%
  3521. │ O │ D │ I │ T │ S │ Z │ A │ P │ C │%@NL@%
  3522. ├───┼───┼───┼───┼───┼───┼───┼───┼───┤%@NL@%
  3523. │   │   │   │   │   │   │   │   │   │%@NL@%
  3524. └───┴───┴───┴───┴───┴───┴───┴───┴───┘%@NL@%
  3525. %@NL@%
  3526. %@4@%Loads a value from an operand into a descriptor table%@EH@%
  3527. register. %@AB@%LGDT%@AE@% loads into the Global Descriptor Table, %@AB@%LIDT %@AE@%
  3528. into the Interrupt Descriptor Table, and %@AB@%LLDT %@AE@%into the
  3529. Local Descriptor Table. These instructions are available
  3530. only in privileged mode. See Intel documentation for details
  3531. on descriptor tables and other privileged-mode concepts.%@NL@%
  3532. %@NL@%
  3533. ───────────────────────────────────────────────────────────────────────────%@NL@%
  3534. ┌───────────┐ ┌───────────┐ ┌──────────────┐%@NL@%
  3535. │ 00001111  │ │ 00000001  │ │ %@AI@%mod%@AE@%, 010,%@AI@%r/m%@AE@% │     %@AI@%disp%@AE@% %@AI@%(2)%@AE@%%@NL@%
  3536. └───────────┘ └───────────┘ └──────────────┘%@NL@%
  3537. ─────────────────┬─────────────────────────┬───────────────────────────────%@NL@%
  3538.                  │ lgdt  descriptor        │ 88/86     ─%@NL@%
  3539. %@AB@%LGDT  %@AI@%mem64%@AE@%      │                         │   286     11%@NL@%
  3540.                  │                         │   386     11%@NL@%
  3541. ─────────────────┴─────────────────────────┴───────────────────────────────%@NL@%
  3542. ┌───────────┐ ┌───────────┐ ┌───────────────┐%@NL@%
  3543. │ 00001111  │ │ 00000001  │ │ %@AI@%mod%@AE@%, 011, %@AI@%r/%@AE@%m │     %@AI@%disp%@AE@% %@AI@%(2)%@AE@%%@NL@%
  3544. └───────────┘ └───────────┘ └───────────────┘%@NL@%
  3545. ─────────────────┬─────────────────────────┬───────────────────────────────%@NL@%
  3546.                  │ lidt  descriptor        │ 88/86     ─%@NL@%
  3547. %@AB@%LIDT  %@AI@%mem64%@AE@%      │                         │   286     12%@NL@%
  3548.                  │                         │   386     11%@NL@%
  3549. ─────────────────┴─────────────────────────┴───────────────────────────────%@NL@%
  3550. ┌───────────┐ ┌───────────┐ ┌──────────────┐%@NL@%
  3551. │ 00001111  │ │ 00000000  │ │ %@AI@%mod%@AE@%, 010,%@AI@%r/m%@AE@% │     %@AI@%disp%@AE@% %@AI@%(0%@AE@% %@AI@%or%@AE@% %@AI@%2)%@AE@%%@NL@%
  3552. └───────────┘ └───────────┘ └──────────────┘%@NL@%
  3553. ─────────────────┬─────────────────────────┬───────────────────────────────%@NL@%
  3554.                  │ lldt  ax                │ 88/86     ─%@NL@%
  3555. %@AB@%LLDT  %@AI@%reg16%@AE@%      │                         │   286     17%@NL@%
  3556.                  │                         │   386     20%@NL@%
  3557. ─────────────────┼─────────────────────────┼───────────────────────────────%@NL@%
  3558.                  │ lldt  selector          │ 88/86     ─%@NL@%
  3559. %@AB@%LLDT  %@AI@%mem16%@AE@%      │                         │   286     19%@NL@%
  3560.                  │                         │   386     24%@NL@%
  3561. ─────────────────┴─────────────────────────┴───────────────────────────────%@NL@%
  3562. %@NL@%
  3563. %@NL@%
  3564. %@CR:72        @%%@NL@%
  3565. %@3@%%@AB@%LMSW%@AE@%%@CR:LMSW      @%%@EH@%%@QR:lmsw@%%@NL@%
  3566. %@AB@%Load Machine Status Word%@AE@%%@QR:load machine status word@%%@QR:load status word@%%@QR:machine status word@%%@NL@%
  3567. %@AB@%80286/386 Privileged Only%@AE@%%@NL@%
  3568. ┌───┬───┬───┬───┬───┬───┬───┬───┬───┐%@NL@%
  3569. │ O │ D │ I │ T │ S │ Z │ A │ P │ C │%@NL@%
  3570. ├───┼───┼───┼───┼───┼───┼───┼───┼───┤%@NL@%
  3571. │   │   │   │   │   │   │   │   │   │%@NL@%
  3572. └───┴───┴───┴───┴───┴───┴───┴───┴───┘%@NL@%
  3573. %@NL@%
  3574. %@4@%Loads a value from a memory operand into the Machine%@EH@%
  3575. Status Word (MSW). This instruction is available only in
  3576. privileged mode. See Intel documentation for details on the
  3577. MSW and other privileged-mode concepts.%@NL@%
  3578. %@NL@%
  3579. ───────────────────────────────────────────────────────────────────────────%@NL@%
  3580. ┌───────────┐ ┌───────────┐ ┌──────────────┐%@NL@%
  3581. │ 00001111  │ │ 00000001  │ │ %@AI@%mod%@AE@%, 110,%@AI@%r/m%@AE@% │     %@AI@%disp%@AE@% %@AI@%(0%@AE@% %@AI@%or%@AE@% %@AI@%2)%@AE@%%@NL@%
  3582. └───────────┘ └───────────┘ └──────────────┘%@NL@%
  3583. ─────────────────┬─────────────────────────┬───────────────────────────────%@NL@%
  3584.                  │ lmsw  ax                │ 88/86     ─%@NL@%
  3585. %@AB@%LMSW  %@AI@%reg16%@AE@%      │                         │   286     3%@NL@%
  3586.                  │                         │   386     10%@NL@%
  3587. ─────────────────┼─────────────────────────┼───────────────────────────────%@NL@%
  3588.                  │ lmsw  machine           │ 88/86     ─%@NL@%
  3589. %@AB@%LMSW  %@AI@%mem16%@AE@%      │                         │   286     6%@NL@%
  3590.                  │                         │   386     13%@NL@%
  3591. ─────────────────┴─────────────────────────┴───────────────────────────────%@NL@%
  3592. %@NL@%
  3593. %@NL@%
  3594. %@NL@%
  3595. %@3@%%@AB@%LOCK%@AE@%%@CR:LOCK      @%%@EH@%%@QR:lock@%%@NL@%
  3596. %@AB@%Lock the Bus%@AE@%%@QR:bus lock@%%@QR:lock the bus@%%@QR:lock bus@%%@NL@%
  3597. ┌───┬───┬───┬───┬───┬───┬───┬───┬───┐%@NL@%
  3598. │ O │ D │ I │ T │ S │ Z │ A │ P │ C │%@NL@%
  3599. ├───┼───┼───┼───┼───┼───┼───┼───┼───┤%@NL@%
  3600. │   │   │   │   │   │   │   │   │   │%@NL@%
  3601. └───┴───┴───┴───┴───┴───┴───┴───┴───┘%@NL@%
  3602. %@NL@%
  3603. %@4@%Locks out other processors during execution of the next%@EH@%
  3604. instruction. This instruction is a prefix. It usually precedes an
  3605. instruction that modifies a memory location that another processor
  3606. might attempt to modify at the same time. See Intel documentation
  3607. for details on multiprocessor environments.%@NL@%
  3608. %@NL@%
  3609. ───────────────────────────────────────────────────────────────────────────%@NL@%
  3610. ┌───────────┐%@NL@%
  3611. │ 11110000  │%@NL@%
  3612. └───────────┘%@NL@%
  3613. ────────────────────┬─────────────────────────┬────────────────────────────%@NL@%
  3614.                     │ lock  xchg ax,sem       │ 88/86     2%@NL@%
  3615. %@AB@%LOCK  %@AI@%instruction%@AE@%   │                         │   286     0%@NL@%
  3616.                     │                         │   386     0%@NL@%
  3617. ────────────────────┴─────────────────────────┴────────────────────────────%@NL@%
  3618. %@NL@%
  3619. %@NL@%
  3620. %@CR:73        @%%@NL@%
  3621. %@3@%%@AB@%LODS/LODSB/LODSW/LODSD%@AE@%%@CR:LODS      @%%@EH@%%@QR:lods@%%@QR:lodsb@%%@QR:lodsw@%%@QR:lodsd@%%@NL@%
  3622. %@AB@%Load String Operand%@AE@%%@QR:load string operand@%%@QR:load operand@%%@QR:string operand@%%@NL@%
  3623. ┌───┬───┬───┬───┬───┬───┬───┬───┬───┐%@NL@%
  3624. │ O │ D │ I │ T │ S │ Z │ A │ P │ C │%@NL@%
  3625. ├───┼───┼───┼───┼───┼───┼───┼───┼───┤%@NL@%
  3626. │   │   │   │   │   │   │   │   │   │%@NL@%
  3627. └───┴───┴───┴───┴───┴───┴───┴───┴───┘%@NL@%
  3628. %@NL@%
  3629. %@4@%Loads a string from memory into the accumulator register.%@EH@%
  3630. The string to be loaded is the source and must be pointed to by
  3631. %@AB@%DS%@AE@%:%@AB@%SI%@AE@% (even if an operand is given). For each source element
  3632. loaded, %@AB@%SI %@AE@%is adjusted according to the size of the operands
  3633. and the status of the direction flag. %@AB@%SI %@AE@%is increased
  3634. if the direction flag has been cleared with %@AB@%CLD %@AE@%or decreased if
  3635. the direction flag has been set with %@AB@%STD%@AE@%.%@NL@%
  3636. %@NL@%
  3637. %@4@%If the %@AB@%LODS %@AE@%form of the instruction is used, an operand must be%@EH@%
  3638. provided to indicate the size of the data elements to be processed.
  3639. A segment override can be given. If %@AB@%LODSB %@AE@%(bytes), %@AB@%LODSW %@AE@%(words),
  3640. or %@AB@%LODSD%@AE@% (doublewords on the 80386 only) is used, the instruction
  3641. determines the size of the data elements to be processed and whether
  3642. the element will be loaded to %@AB@%AL%@AE@%, %@AB@%AX%@AE@%, or %@AB@%EAX%@AE@%. Operands are not
  3643. allowed.%@NL@%
  3644. %@NL@%
  3645. %@4@%%@AB@%LODS %@AE@%and its variations are not normally used with repeat prefixes,%@EH@%
  3646. since there is no reason to repeatedly load memory values to a
  3647. register.%@NL@%
  3648. %@NL@%
  3649. ───────────────────────────────────────────────────────────────────────────%@NL@%
  3650. ┌───────────┐%@NL@%
  3651. │ 1010110%@AI@%w%@AE@%  │%@NL@%
  3652. └───────────┘%@NL@%
  3653. ─────────────────────────┬───────────────────────┬─────────────────────────%@NL@%
  3654. %@AB@%LODS  «%@AI@%segreg%@AB@%:»%@AI@%src%@AE@%       │ lods  es:source       │ 88/86   12 (W88=16)%@NL@%
  3655. %@AB@%LODSB%@AE@%                    │ lodsw                 │   286   5%@NL@%
  3656. %@AB@%LODSW%@AE@%                    │                       │   386   5%@NL@%
  3657. ─────────────────────────┴───────────────────────┴─────────────────────────%@NL@%
  3658. %@NL@%
  3659. %@NL@%
  3660. %@CR:74        @%%@NL@%
  3661. %@3@%%@AB@%LOOP%@AE@%%@CR:LOOP      @%%@EH@%%@QR:loop@%%@NL@%
  3662. %@AB@%Loop%@AE@%%@NL@%
  3663. ┌───┬───┬───┬───┬───┬───┬───┬───┬───┐%@NL@%
  3664. │ O │ D │ I │ T │ S │ Z │ A │ P │ C │%@NL@%
  3665. ├───┼───┼───┼───┼───┼───┼───┼───┼───┤%@NL@%
  3666. │   │   │   │   │   │   │   │   │   │%@NL@%
  3667. └───┴───┴───┴───┴───┴───┴───┴───┴───┘%@NL@%
  3668. %@NL@%
  3669. %@4@%Loops repeatedly to a specified label. %@AB@%LOOP%@AE@% decrements%@EH@%
  3670. %@AB@%CX%@AE@% (without changing any flags) and if the result is not 0,
  3671. transfers execution to the address specified by the operand.
  3672. If %@AB@%CX%@AE@% is 0 after being decremented, execution continues at
  3673. the next instruction. The operand must specify a short label
  3674. (between -128 and 127 bytes from the instruction following
  3675. the %@AB@%LOOP%@AE@% instruction).%@NL@%
  3676. %@NL@%
  3677. ───────────────────────────────────────────────────────────────────────────%@NL@%
  3678. ┌───────────┐%@NL@%
  3679. │ 11100010  │     %@AI@%disp%@AE@% %@AI@%(1)%@AE@%%@NL@%
  3680. └───────────┘%@NL@%
  3681. ─────────────────┬─────────────────────────┬───────────────────────────────%@NL@%
  3682.                  │ loop  wend              │ 88/86     17,noj=5%@NL@%
  3683. %@AB@%LOOP  %@AI@%label%@AE@%      │                         │   286     8+m,noj=4%@NL@%
  3684.                  │                         │   386     11+m%@NL@%
  3685. ─────────────────┴─────────────────────────┴───────────────────────────────%@NL@%
  3686. %@NL@%
  3687. %@NL@%
  3688. %@NL@%
  3689. %@3@%%@AB@%LOOP%@AI@%condition%@AE@%%@CR:LOOPcondit@%%@EH@%%@QR:loop@%%@NL@%
  3690. %@AB@%Loop If%@AE@%%@QR:loop if@%%@NL@%
  3691. ┌───┬───┬───┬───┬───┬───┬───┬───┬───┐%@NL@%
  3692. │ O │ D │ I │ T │ S │ Z │ A │ P │ C │%@NL@%
  3693. ├───┼───┼───┼───┼───┼───┼───┼───┼───┤%@NL@%
  3694. │   │   │   │   │   │   │   │   │   │%@NL@%
  3695. └───┴───┴───┴───┴───┴───┴───┴───┴───┘%@NL@%
  3696. %@NL@%
  3697. %@4@%Loops repeatedly to a specified label if %@AI@%condition%@AE@% is met%@EH@%
  3698. and if %@AB@%CX%@AE@% is not 0. The instruction decrements %@AB@%CX%@AE@% (without
  3699. changing any flags) and tests to see if the zero flag was
  3700. set by a previous instruction (such as %@AB@%CMP%@AE@%). With %@AB@%LOOPE%@AE@% and
  3701. %@AB@%LOOPZ%@AE@% (they are synonyms), execution is transferred to the
  3702. label if the zero flag is set and %@AB@%CX%@AE@% is not 0. With %@AB@%LOOPNE%@AE@%
  3703. and %@AB@%LOOPNZ%@AE@% (they are synonyms), execution is transferred
  3704. to the label if the zero flag is cleared and %@AB@%CX%@AE@% is not 0.
  3705. Execution continues at the next instruction if the
  3706. condition is not met. Before entering the loop, %@AB@%CX%@AE@% should
  3707. be set to the maximum number of repetitions desired.%@NL@%
  3708. %@NL@%
  3709. ───────────────────────────────────────────────────────────────────────────%@NL@%
  3710. ┌───────────┐%@NL@%
  3711. │ 11100001  │     %@AI@%disp%@AE@% %@AI@%(1)%@AE@%%@NL@%
  3712. └───────────┘%@NL@%
  3713. ────────────────┬─────────────────────────┬────────────────────────────────%@NL@%
  3714. %@AB@%LOOPE %@AI@%label%@AE@%     │ loopz again             │ 88/86     18,noj=6%@NL@%
  3715. %@AB@%LOOPZ %@AI@%label%@AE@%     │                         │   286     8+m,noj=4 %@NL@%
  3716.                 │                         │   386     11+m%@NL@%
  3717. ────────────────┴─────────────────────────┴────────────────────────────────%@NL@%
  3718. ┌───────────┐%@NL@%
  3719. │ 11100000  │     %@AI@%disp%@AE@% %@AI@%(1)%@AE@%%@NL@%
  3720. └───────────┘%@NL@%
  3721. ────────────────┬─────────────────────────┬────────────────────────────────%@NL@%
  3722. %@AB@%LOOPNE %@AI@%label%@AE@%    │ loopnzfor_next          │ 88/86     19,noj=5%@NL@%
  3723. %@AB@%LOOPNZ %@AI@%label%@AE@%    │                         │   286     8,noj=4%@NL@%
  3724.                 │                         │   386     11+m%@NL@%
  3725. ────────────────┴─────────────────────────┴────────────────────────────────%@NL@%
  3726. %@NL@%
  3727. %@NL@%
  3728. %@CR:75        @%%@NL@%
  3729. %@3@%%@AB@%LSL%@AE@%%@CR:LSL       @%%@EH@%%@QR:lsl@%%@NL@%
  3730. %@AB@%Load Segment Limit%@AE@%%@QR:load segment limit@%%@QR:load segment@%%@QR:segment limit@%%@NL@%
  3731. %@AB@%80286/386 Protected Only%@AE@%%@NL@%
  3732. ┌───┬───┬───┬───┬───┬───┬───┬───┬───┐%@NL@%
  3733. │ O │ D │ I │ T │ S │ Z │ A │ P │ C │%@NL@%
  3734. ├───┼───┼───┼───┼───┼───┼───┼───┼───┤%@NL@%
  3735. │   │   │   │   │   │ ± │   │   │   │%@NL@%
  3736. └───┴───┴───┴───┴───┴───┴───┴───┴───┘%@NL@%
  3737. %@NL@%
  3738. %@4@%Loads the segment limit of a selector into a specified%@EH@%
  3739. register.The source operand must be a register or memory
  3740. operand containing a selector. The destination operand must
  3741. be a register that will receive the segment limits if the
  3742. selector is valid and visible at the current privilege level.
  3743. The zero flag is set if the segment limits are transferred,
  3744. or cleared if they are not. See Intel documentation for
  3745. details on selectors, segment limits, and other privileged-
  3746. mode concepts.%@NL@%
  3747. %@NL@%
  3748. ───────────────────────────────────────────────────────────────────────────%@NL@%
  3749. ┌───────────┐ ┌───────────┐ ┌───────────────┐%@NL@%
  3750. │ 00001111  │ │ 00000011  │ │ %@AI@%mod%@AE@%, %@AI@%reg%@AE@%, %@AI@%r/m%@AE@% │     %@AI@%disp%@AE@% %@AI@%(0%@AE@% %@AI@%or%@AE@% %@AI@%2)%@AE@%%@NL@%
  3751. └───────────┘ └───────────┘ └───────────────┘%@NL@%
  3752. ────────────────────┬─────────────────────────┬────────────────────────────%@NL@%
  3753. %@AB@%LSL  %@AI@%reg16,reg16%@AE@%    │ lsl   ax,bx             │ 88/86     ─%@NL@%
  3754. %@AB@%LSL  %@AI@%reg32,reg32%@AE@%%@FN@%
  3755. %@FC@%1. 80386 only.%@EF@%1  │                         │   286     14%@NL@%
  3756.                     │                         │   386     20,25%@FN@%
  3757. %@FC@%2. The first value is for byte granular; the second
  3758. %@FC@%is for page granular.%@EF@%2%@NL@%
  3759. ────────────────────┼─────────────────────────┼────────────────────────────%@NL@%
  3760. %@AB@%LSL  %@AI@%reg16,mem16%@AE@%    │ lsl   cx,seg_lim        │ 88/86     ─%@NL@%
  3761. %@AB@%LSL  %@AI@%reg32,mem32%@AE@%%@FN@%
  3762. %@FC@%1. 80386 only.%@EF@%1  │                         │   286     16%@NL@%
  3763.                     │                         │   386     21,26%@FN@%
  3764. %@FC@%2. The first value is for byte granular; the second
  3765. %@FC@%is for page granular.%@EF@%2%@NL@%
  3766. ────────────────────┴─────────────────────────┴────────────────────────────%@NL@%
  3767. %@NL@%
  3768. %@NL@%
  3769. %@NL@%
  3770. %@3@%%@AB@%LSS%@AE@%%@CR:LSS       @%%@EH@%%@QR:lss@%%@NL@%
  3771. %@AB@%Load Far Pointer to Stack Segment%@AE@%%@QR:load far pointer@%%@QR:load far pointer to stack@%%@QR:load pointer to stack@%%@QR:stack segment@%%@NL@%
  3772. %@NL@%
  3773. %@4@%See %@AB@%LDS%@AE@%%@BO:     35607@%.%@EH@%%@NL@%
  3774. %@NL@%
  3775. %@NL@%
  3776. %@CR:76        @%%@NL@%
  3777. %@3@%%@AB@%LTR%@AE@%%@CR:LTR       @%%@EH@%%@QR:ltr@%%@NL@%
  3778. %@AB@%Load Task Register%@AE@%%@QR:load task register@%%@QR:task register@%%@NL@%
  3779. %@AB@%80286/386 Privileged Only%@AE@%%@NL@%
  3780. ┌───┬───┬───┬───┬───┬───┬───┬───┬───┐%@NL@%
  3781. │ O │ D │ I │ T │ S │ Z │ A │ P │ C │%@NL@%
  3782. ├───┼───┼───┼───┼───┼───┼───┼───┼───┤%@NL@%
  3783. │   │   │   │   │   │   │   │   │   │%@NL@%
  3784. └───┴───┴───┴───┴───┴───┴───┴───┴───┘%@NL@%
  3785. %@NL@%
  3786. %@4@%Loads a value from the specified operand to the current task %@EH@%
  3787. register. %@AB@%LTR %@AE@%is available only in privileged mode. See Intel
  3788. documentation for details on task registers and other
  3789. privileged-mode concepts.%@NL@%
  3790. %@NL@%
  3791. ───────────────────────────────────────────────────────────────────────────%@NL@%
  3792. ┌───────────┐ ┌───────────┐ ┌──────────────┐%@NL@%
  3793. │ 00001111  │ │ 00000000  │ │ %@AI@%mod%@AE@%, 001,%@AI@%r/m%@AE@% │     %@AI@%disp%@AE@% %@AI@%(0%@AE@% %@AI@%or%@AE@% %@AI@%2)%@AE@%%@NL@%
  3794. └───────────┘ └───────────┘ └──────────────┘%@NL@%
  3795. ─────────────────┬─────────────────────────┬───────────────────────────────%@NL@%
  3796.                  │ ltr   ax                │ 88/86     ─%@NL@%
  3797. %@AB@%LTR  %@AI@%reg16%@AE@%       │                         │   286     17%@NL@%
  3798.                  │                         │   386     23%@NL@%
  3799. ─────────────────┼─────────────────────────┼───────────────────────────────%@NL@%
  3800.                  │ ltr   task              │ 88/86     ─%@NL@%
  3801. %@AB@%LTR  %@AI@%mem16%@AE@%       │                         │   286     19%@NL@%
  3802.                  │                         │   386     27%@NL@%
  3803. ─────────────────┴─────────────────────────┴───────────────────────────────%@NL@%
  3804. %@NL@%
  3805. %@NL@%
  3806. %@NL@%
  3807. %@3@%%@AB@%MOV%@AE@%%@CR:MOVDAT    @%%@EH@%%@QR:mov@%%@NL@%
  3808. %@AB@%Move Data%@AE@%%@QR:move data@%%@QR:move@%%@NL@%
  3809. ┌───┬───┬───┬───┬───┬───┬───┬───┬───┐%@NL@%
  3810. │ O │ D │ I │ T │ S │ Z │ A │ P │ C │%@NL@%
  3811. ├───┼───┼───┼───┼───┼───┼───┼───┼───┤%@NL@%
  3812. │   │   │   │   │   │   │   │   │   │%@NL@%
  3813. └───┴───┴───┴───┴───┴───┴───┴───┴───┘%@NL@%
  3814. %@NL@%
  3815. %@4@%Copies the value in the source operand to the destination%@EH@%
  3816. operand. If the destination operand is %@AB@%SS%@AE@%, then interrupts
  3817. are disabled until the next instruction is executed (except
  3818. on early versions of the 8088 and 8086).%@NL@%
  3819. %@NL@%
  3820. ───────────────────────────────────────────────────────────────────────────%@NL@%
  3821. ┌───────────┐ ┌───────────────┐%@NL@%
  3822. │ 100010%@AI@%dw%@AE@%  │ │ %@AI@%mod%@AE@%, %@AI@%reg%@AE@%, %@AI@%r/m%@AE@% │     %@AI@%disp%@AE@% %@AI@%(0%@AE@% %@AI@%or%@AE@% %@AI@%2)%@AE@%%@NL@%
  3823. └───────────┘ └───────────────┘%@NL@%
  3824. ────────────────────┬─────────────────────────┬────────────────────────────%@NL@%
  3825.                     │ mov   dh,bh             │88/86     2%@NL@%
  3826. %@AB@%MOV  %@AI@%reg,reg%@AE@%        │ mov   dx,cx             │  286     2%@NL@%
  3827.                     │ mov   bp,sp             │  386     2%@NL@%
  3828. ────────────────────┼─────────────────────────┼────────────────────────────%@NL@%
  3829.                     │ mov   array[di],bx      │ 88/86    9+EA (W88=13+EA)%@NL@%
  3830. %@AB@%MOV  %@AI@%mem,reg%@AE@%        │ mov   count,cx          │  286     3%@NL@%
  3831.                     │                         │  386     2%@NL@%
  3832. ────────────────────┼─────────────────────────┼────────────────────────────%@NL@%
  3833.                     │ mov   bx,pointer        │ 88/86     8+EA (W88=12+EA)%@NL@%
  3834. %@AB@%MOV  %@AI@%reg,mem%@AE@%        │ mov   dx,matrix[bx+di]  │   286     5%@NL@%
  3835.                     │                         │   386     4%@NL@%
  3836. %@CR:77        @%────────────────────┴─────────────────────────┴────────────────────────────%@NL@%
  3837. ┌───────────┐ ┌──────────────┐%@NL@%
  3838. │ 1100011%@AI@%w%@AE@%  │ │ %@AI@%mod%@AE@%, 000,%@AI@%r/m%@AE@% │     %@AI@%disp%@AE@% %@AI@%(0%@AE@% %@AI@%or%@AE@% %@AI@%2)%@AE@%     %@AI@%data%@AE@% %@AI@%(1%@AE@% %@AI@%or%@AE@% %@AI@%2)%@AE@%%@NL@%
  3839. └───────────┘ └──────────────┘%@NL@%
  3840. ────────────────────┬──────────────────────────┬───────────────────────────%@NL@%
  3841.                     │ mov   [bx],15            │  88/86   10+EA (W88=14+EA)%@NL@%
  3842. %@AB@%MOV  %@AI@%mem,immed%@AE@%      │ mov   color,7            │  286     3%@NL@%
  3843.                     │                          │  386     2%@NL@%
  3844. ────────────────────┴──────────────────────────┴───────────────────────────%@NL@%
  3845. ┌───────────┐%@NL@%
  3846. │ 1011%@AI@%w%@AE@% %@AI@%reg%@AE@% │     %@AI@%data%@AE@% %@AI@%(1%@AE@% %@AI@%or%@AE@% %@AI@%2)%@AE@%%@NL@%
  3847. └───────────┘%@NL@%
  3848. ─────────────────────┬─────────────────────────┬───────────────────────────%@NL@%
  3849.                      │ mov   cx,256            │  88/86   4%@NL@%
  3850. %@AB@%MOV  %@AI@%reg,immed%@AE@%       │ mov   dx,OFFSET string  │    286   2%@NL@%
  3851.                      │                         │    386   2%@NL@%
  3852. ─────────────────────┴─────────────────────────┴───────────────────────────%@NL@%
  3853. ┌───────────┐%@NL@%
  3854. │ 101000%@AI@%dw%@AE@%  │     %@AI@%disp%@AE@% %@AI@%(0%@AE@% %@AI@%or%@AE@% %@AI@%2)%@AE@%%@NL@%
  3855. └───────────┘%@NL@%
  3856. ─────────────────────┬─────────────────────────┬───────────────────────────%@NL@%
  3857.                      │ mov   total,ax          │  88/86   10 (W88=14)%@NL@%
  3858. %@AB@%MOV  %@AI@%mem,accum%@AE@%       │ mov   [di],al           │    286   3%@NL@%
  3859.                      │                         │    386   2%@NL@%
  3860. ─────────────────────┼─────────────────────────┼───────────────────────────%@NL@%
  3861.                      │ mov   al,string[bx]     │  88/86   10 (W88=14)%@NL@%
  3862. %@AB@%MOV  %@AI@%accum,mem%@AE@%       │ mov   ax,fsize          │    286   5%@NL@%
  3863.                      │                         │    386   4%@NL@%
  3864. ─────────────────────┴─────────────────────────┴───────────────────────────%@NL@%
  3865. ┌───────────┐ ┌───────────────┐%@NL@%
  3866. │ 100011%@AI@%d%@AE@%0  │ │ %@AI@%mod%@AE@%,%@AI@%sreg%@AE@%, %@AI@%r/m%@AE@% │     %@AI@%disp%@AE@% %@AI@%(0%@AE@% %@AI@%or%@AE@% %@AI@%2)%@AE@%%@NL@%
  3867. └───────────┘ └───────────────┘%@NL@%
  3868. ─────────────────────┬─────────────────────────┬───────────────────────────%@NL@%
  3869.                      │ mov   ds,ax             │  88/86   2%@NL@%
  3870. %@AB@%MOV  %@AI@%segreg,reg16%@AE@%    │                         │    286   2,pm=17%@NL@%
  3871.                      │                         │    386   2,pm=18%@NL@%
  3872. ─────────────────────┼─────────────────────────┼───────────────────────────%@NL@%
  3873.                      │ mov   es,psp            │  88/86   8+EA (88=12+EA)%@NL@%
  3874. %@AB@%MOV  %@AI@%segreg,mem16%@AE@%    │                         │    286   5,pm=19%@NL@%
  3875.                      │                         │    386   5,pm=19%@NL@%
  3876. ─────────────────────┼─────────────────────────┼───────────────────────────%@NL@%
  3877.                      │ mov   ax,ds             │  88/86   2%@NL@%
  3878. %@AB@%MOV  %@AI@%reg16,segreg%@AE@%    │                         │    286   2%@NL@%
  3879.                      │                         │    386   2%@NL@%
  3880. ─────────────────────┼─────────────────────────┼───────────────────────────%@NL@%
  3881.                      │ mov   stack_save,ss     │  88/86   9+EA (88=13+EA)%@NL@%
  3882. %@AB@%MOV  %@AI@%mem16,segreg%@AE@%    │                         │    286   3%@NL@%
  3883.                      │                         │    386   2%@NL@%
  3884. ─────────────────────┴─────────────────────────┴───────────────────────────%@NL@%
  3885. %@NL@%
  3886. %@NL@%
  3887. %@CR:78        @%%@NL@%
  3888. %@3@%%@AB@%MOV%@AE@%%@CR:MOV       @%%@EH@%%@QR:mov@%%@NL@%
  3889. %@AB@%Move to/from Special Registers%@AE@%%@QR:move to special registers@%%@QR:move from special registers@%%@QR:move to registers@%%@QR:move from registers@%%@QR:move to register@%%@QR:move from register@%%@NL@%
  3890. %@AB@%80386 Only%@AE@%%@NL@%
  3891. ┌───┬───┬───┬───┬───┬───┬───┬───┬───┐%@NL@%
  3892. │ O │ D │ I │ T │ S │ Z │ A │ P │ C │%@NL@%
  3893. ├───┼───┼───┼───┼───┼───┼───┼───┼───┤%@NL@%
  3894. │ ? │   │   │   │ ? │ ? │ ? │ ? │ ? │%@NL@%
  3895. └───┴───┴───┴───┴───┴───┴───┴───┴───┘%@NL@%
  3896. %@NL@%
  3897. %@4@%Stores or loads a value from a special register to or from%@EH@%
  3898. a 32-bit general purpose register. The special registers include
  3899. the control registers %@AB@%CR0%@AE@%, %@AB@%CR2%@AE@%, and %@AB@%CR3%@AE@%; the debug registers
  3900. %@AB@%DR0%@AE@%, %@AB@%DR1%@AE@%, %@AB@%DR2%@AE@%, %@AB@%DR3%@AE@%, %@AB@%DR6%@AE@%, and %@AB@%DR7%@AE@%; and the test registers %@AB@%TR6%@AE@% and
  3901. %@AB@%TR7%@AE@%. See Intel documentation for details on special registers.%@NL@%
  3902. %@NL@%
  3903. ───────────────────────────────────────────────────────────────────────────%@NL@%
  3904. ┌───────────┐ ┌───────────┐ ┌────────────────┐%@NL@%
  3905. │ 00001111  │ │ 001000%@AI@%d%@AE@%0  │ │ 11, %@AI@%reg%@AE@%%@FN@%
  3906. %@FC@%1. The %@AI@%reg%@AE@% field contains the register number
  3907. %@FC@%of the special register (for example, 000 for %@AB@%CR0%@AE@%, 011 for
  3908. %@FC@%%@AB@%DR7%@AE@%, or 111 for %@AB@%TR7%@AE@%).%@EF@%1, %@AI@%r/m%@AE@% │%@NL@%
  3909. └───────────┘ └───────────┘ └────────────────┘%@NL@%
  3910. ──────────────────────┬────────────────────────┬───────────────────────────%@NL@%
  3911.                       │ mov   eax,cr2          │ 88/86   ─%@NL@%
  3912. %@AB@%MOV  %@AI@%r32,%@AE@% %@AI@%controlreg%@AE@%  │                        │   286   ─%@NL@%
  3913.                       │                        │   386   6%@NL@%
  3914. ──────────────────────┼────────────────────────┼───────────────────────────%@NL@%
  3915.                       │ mov   cr0,ebx          │ 88/86   ─%@NL@%
  3916. %@AB@%MOV  %@AI@%controlreg,r32%@AE@%   │                        │   286   ─%@NL@%
  3917.                       │                        │   386   CR0=10,CR2=4,CR3=5%@NL@%
  3918. ──────────────────────┴────────────────────────┴───────────────────────────%@NL@%
  3919. ┌───────────┐ ┌───────────┐ ┌────────────────┐%@NL@%
  3920. │ 00001111  │ │ 001000%@AI@%d%@AE@%1  │ │ 11, %@AI@%reg%@AE@%%@FN@%
  3921. %@FC@%1. The %@AI@%reg%@AE@% field contains the register number of
  3922. %@FC@%the special register (for example, 000 for %@AB@%CR0%@AE@%, 011 for
  3923. %@FC@%%@AB@%DR7%@AE@%, or 111 for %@AB@%TR7%@AE@%).%@EF@%1, %@AI@%r/m%@AE@% │%@NL@%
  3924. └───────────┘ └───────────┘ └────────────────┘%@NL@%
  3925. ─────────────────────┬─────────────────────────┬───────────────────────────%@NL@%
  3926.                      │ mov   edx,dr3           │ 88/86   ─%@NL@%
  3927. %@AB@%MOV  %@AI@%r32,debugreg%@AE@%    │                         │   286   ─%@NL@%
  3928.                      │                         │   386   DR0-3=22,DR6-7=14%@NL@%
  3929. ─────────────────────┼─────────────────────────┼───────────────────────────%@NL@%
  3930.                      │ mov   dr0,ecx           │ 88/86   ─%@NL@%
  3931. %@AB@%MOV  %@AI@%debugreg,reg32%@AE@%  │                         │   286   ─%@NL@%
  3932.                      │                         │   386   DR0-3=22,DR6-7=16%@NL@%
  3933. ─────────────────────┴─────────────────────────┴───────────────────────────%@NL@%
  3934. ┌───────────┐ ┌───────────┐ ┌───────────────┐%@NL@%
  3935. │ 00001111  │ │ 001001%@AI@%d%@AE@%0  │ │ 11,%@AI@%reg%@AE@%%@FN@%
  3936. %@FC@%1. The %@AI@%reg%@AE@% field contains the register number of
  3937. %@FC@%the special register (for example, 000 for %@AB@%CR0%@AE@%, 011 for
  3938. %@FC@%%@AB@%DR7%@AE@%, or 111 for %@AB@%TR7%@AE@%).%@EF@%1, %@AI@%r/m%@AE@% │%@NL@%
  3939. └───────────┘ └───────────┘ └───────────────┘%@NL@%
  3940. ─────────────────────┬─────────────────────────┬───────────────────────────%@NL@%
  3941.                      │ mov   edx,tr6           │ 88/86   ─%@NL@%
  3942. %@AB@%MOV  %@AI@%r32,testreg%@AE@%     │                         │   286   ─%@NL@%
  3943.                      │                         │   386   12%@NL@%
  3944. ─────────────────────┼─────────────────────────┼───────────────────────────%@NL@%
  3945.                      │ mov   tr7,eax           │ 88/86   ─%@NL@%
  3946. %@AB@%MOV  %@AI@%testreg,%@AE@% %@AI@%r32%@AE@%    │                         │   286   ─%@NL@%
  3947.                      │                         │   386   12%@NL@%
  3948. ─────────────────────┴─────────────────────────┴───────────────────────────%@NL@%
  3949. %@NL@%
  3950. %@NL@%
  3951. %@CR:79        @%%@NL@%
  3952. %@3@%%@AB@%MOVS/MOVSB/MOVSW/MOVSD%@AE@%%@CR:MOVS      @%%@EH@%%@QR:movs@%%@QR:movsb@%%@QR:movsw@%%@QR:movsd@%%@NL@%
  3953. %@AB@%Move String Data%@AE@%%@QR:move string@%%@QR:move string data@%%@NL@%
  3954. ┌───┬───┬───┬───┬───┬───┬───┬───┬───┐%@NL@%
  3955. │ O │ D │ I │ T │ S │ Z │ A │ P │ C │%@NL@%
  3956. ├───┼───┼───┼───┼───┼───┼───┼───┼───┤%@NL@%
  3957. │   │   │   │   │   │   │   │   │   │%@NL@%
  3958. └───┴───┴───┴───┴───┴───┴───┴───┴───┘%@NL@%
  3959. %@NL@%
  3960. %@4@%Moves a string from one area of memory to another. The%@EH@%
  3961. source string must be pointed to by %@AB@%DS%@AE@%:%@AB@%SI%@AE@% and the destination
  3962. address must be pointed to by %@AB@%ES%@AE@%:%@AB@%DI%@AE@% (even if operands are
  3963. given). For each element moved, %@AB@%DI%@AE@% and %@AB@%SI%@AE@% are adjusted
  3964. according to the size of the operands and the status of
  3965. the direction flag. They are increased if the direction flag
  3966. has been cleared with %@AB@%CLD%@AE@%, or decreased if the direction
  3967. flag has been set with %@AB@%STD%@AE@%.%@NL@%
  3968. %@NL@%
  3969. %@4@%If the %@AB@%MOVS%@AE@% form of the instruction is used, operands must%@EH@%
  3970. be provided to indicate the size of the data elements to be
  3971. processed. A segment override can be given for the source
  3972. operand (but not for the destination). If %@AB@%MOVSB%@AE@% (bytes),
  3973. %@AB@%MOVSW%@AE@% (words), or %@AB@%MOVSD%@AE@% (doublewords on the 80386 only)
  3974. is used, the instruction determines the size of the data
  3975. elements to be processed. Operands are not allowed.%@NL@%
  3976. %@NL@%
  3977. %@4@%%@AB@%MOVS%@AE@% and its variations are usually used with the %@AB@%REP%@AE@% prefix.%@EH@%
  3978. Before a move using a repeat prefix, %@AB@%CX%@AE@% should contain the
  3979. number of elements to move.%@NL@%
  3980. %@NL@%
  3981. ───────────────────────────────────────────────────────────────────────────%@NL@%
  3982. ┌───────────┐%@NL@%
  3983. │ 1010010%@AI@%w%@AE@%  │%@NL@%
  3984. └───────────┘%@NL@%
  3985. ──────────────────────────────┬───────────────────────┬────────────────────%@NL@%
  3986. %@AB@%MOVS «ES:»%@AI@%dest,%@AE@%«%@AI@%segreg%@AB@%:%@AE@%»%@AI@%src%@AE@%   │ rep   movsb           │ 88/86   18 (W88=26)%@NL@%
  3987. %@AB@%MOVSB%@AE@%                         │ movs  dest,es:source  │   286   5%@NL@%
  3988. %@AB@%MOVSW%@AE@%                         │                       │   386   7%@NL@%
  3989. ──────────────────────────────┴───────────────────────┴────────────────────%@NL@%
  3990. %@NL@%
  3991. %@NL@%
  3992. %@CR:80        @%%@NL@%
  3993. %@3@%%@AB@%MOVSX%@AE@%%@CR:MOVSX     @%%@EH@%%@QR:movsx@%%@NL@%
  3994. %@AB@%Move with Sign-Extend%@AE@%%@QR:move with sign-extend@%%@QR:move with sign extend@%%@QR:move with sign@%%@QR:sign extend move@%%@QR:sign-extend move@%%@NL@%
  3995. %@AB@%80386 Only%@AE@%%@NL@%
  3996. ┌───┬───┬───┬───┬───┬───┬───┬───┬───┐%@NL@%
  3997. │ O │ D │ I │ T │ S │ Z │ A │ P │ C │%@NL@%
  3998. ├───┼───┼───┼───┼───┼───┼───┼───┼───┤%@NL@%
  3999. │   │   │   │   │   │   │   │   │   │%@NL@%
  4000. └───┴───┴───┴───┴───┴───┴───┴───┴───┘%@NL@%
  4001. %@NL@%
  4002. %@4@%Copies and sign-extends the value of the source operand%@EH@%
  4003. to the destination register. %@AB@%MOVSX%@AE@% is used to copy a signed
  4004. 8-bit or 16-bit source operand to a larger 16-bit or 32-bit
  4005. destination register.%@NL@%
  4006. %@NL@%
  4007. ───────────────────────────────────────────────────────────────────────────%@NL@%
  4008. ┌───────────┐ ┌───────────┐ ┌───────────────┐%@NL@%
  4009. │ 00001111  │ │ 1011111%@AI@%w%@AE@%  │ │ %@AI@%mod%@AE@%, %@AI@%reg%@AE@%, %@AI@%r/m%@AE@% │     %@AI@%disp%@AE@% %@AI@%(0,%@AE@% %@AI@%2,%@AE@% %@AI@%or%@AE@% %@AI@%4)%@AE@%%@NL@%
  4010. └───────────┘ └───────────┘ └───────────────┘%@NL@%
  4011. ─────────────────┬─────────────────────────┬───────────────────────────────%@NL@%
  4012.                  │ movsx eax,bx            │ 88/86     ─%@NL@%
  4013. %@AB@%MOVSX  %@AI@%reg%@AE@%,%@AI@%reg%@AE@%   │ movsx ecx,bl            │   286     ─%@NL@%
  4014.                  │ movsx bx,al             │   386     3%@NL@%
  4015. ─────────────────┼─────────────────────────┼───────────────────────────────%@NL@%
  4016.                  │ movsx cx,bsign          │ 88/86     ─%@NL@%
  4017. %@AB@%MOVSX  %@AI@%reg%@AE@%,%@AI@%mem%@AE@%   │ movsx edx,wsign         │   286     ─%@NL@%
  4018.                  │ movsx eax,bsign         │   386     6%@NL@%
  4019. ─────────────────┴─────────────────────────┴───────────────────────────────%@NL@%
  4020. %@NL@%
  4021. %@NL@%
  4022. %@NL@%
  4023. %@3@%%@AB@%MOVZX%@AE@%%@CR:MOVZX     @%%@EH@%%@QR:movzx@%%@NL@%
  4024. %@AB@%Move with Zero-Extend%@AE@%%@QR:move with zero-extend@%%@QR:move with zero extend@%%@QR:zero-extend move@%%@QR:zero extend move@%%@NL@%
  4025. %@AB@%80386 Only%@AE@%%@NL@%
  4026. ┌───┬───┬───┬───┬───┬───┬───┬───┬───┐%@NL@%
  4027. │ O │ D │ I │ T │ S │ Z │ A │ P │ C │%@NL@%
  4028. ├───┼───┼───┼───┼───┼───┼───┼───┼───┤%@NL@%
  4029. │   │   │   │   │   │   │   │   │   │%@NL@%
  4030. └───┴───┴───┴───┴───┴───┴───┴───┴───┘%@NL@%
  4031. %@NL@%
  4032. %@4@%Copies and zero-extends the value of the source operand%@EH@%
  4033. to the destination register. %@AB@%MOVZX%@AE@% is used to copy an unsigned
  4034. 8-bit or 16-bit source operand to a larger 16-bit or 32-bit
  4035. destination register.%@NL@%
  4036. %@NL@%
  4037. ───────────────────────────────────────────────────────────────────────────%@NL@%
  4038. ┌───────────┐ ┌───────────┐ ┌───────────────┐%@NL@%
  4039. │ 00001111  │ │ 1011011%@AI@%w%@AE@%  │ │ %@AI@%mod%@AE@%, %@AI@%reg%@AE@%, %@AI@%r/m%@AE@% │     %@AI@%disp%@AE@% %@AI@%(0,%@AE@% %@AI@%2,%@AE@% %@AI@%or%@AE@% %@AI@%4)%@AE@%%@NL@%
  4040. └───────────┘ └───────────┘ └───────────────┘%@NL@%
  4041. ─────────────────┬─────────────────────────┬───────────────────────────────%@NL@%
  4042.                  │ movzx eax,bx            │ 88/86     ─%@NL@%
  4043. %@AB@%MOVZX  %@AI@%reg%@AE@%,%@AI@%reg%@AE@%   │ movzx ecx,bl            │   286     ─%@NL@%
  4044.                  │ movzx bx,al             │   386     3%@NL@%
  4045. ─────────────────┼─────────────────────────┼───────────────────────────────%@NL@%
  4046.                  │ movzx cx,bunsign        │ 88/86     ─%@NL@%
  4047. %@AB@%MOVZX  %@AI@%reg%@AE@%,%@AI@%mem%@AE@%   │ movzx edx,wunsign       │   286     ─%@NL@%
  4048.                  │ movzx eax,bunsign       │   386     6%@NL@%
  4049. ─────────────────┴─────────────────────────┴───────────────────────────────%@NL@%
  4050. %@NL@%
  4051. %@NL@%
  4052. %@CR:81        @%%@NL@%
  4053. %@3@%%@AB@%MUL%@AE@%%@CR:MUL       @%%@EH@%%@QR:mul@%%@NL@%
  4054. %@AB@%Unsigned Multiply%@AE@%%@QR:unsigned multiply@%%@QR:multiply@%%@NL@%
  4055. ┌───┬───┬───┬───┬───┬───┬───┬───┬───┐%@NL@%
  4056. │ O │ D │ I │ T │ S │ Z │ A │ P │ C │%@NL@%
  4057. ├───┼───┼───┼───┼───┼───┼───┼───┼───┤%@NL@%
  4058. │ ± │   │   │   │ ? │ ? │ ? │ ? │ ± │%@NL@%
  4059. └───┴───┴───┴───┴───┴───┴───┴───┴───┘%@NL@%
  4060. %@NL@%
  4061. %@4@%Multiplies an implied destination operand by a specified source%@EH@%
  4062. operand. Both operands are treated as unsigned numbers. If a
  4063. single 16-bit operand is given, the implied destination is %@AB@%AX%@AE@%
  4064. and the product goes into the %@AB@%DX%@AE@%:%@AB@%AX%@AE@% register pair. If a single
  4065. 8-bit operand is given, the implied destination is %@AB@%AL%@AE@% and the
  4066. product goes into %@AB@%AX%@AE@%. On the 80386, if the operand is %@AB@%EAX%@AE@%, the
  4067. product goes into the %@AB@%EDX%@AE@%:%@AB@%EAX%@AE@% register pair. The carry and
  4068. overflow flags are set if %@AB@%DX%@AE@% is not 0 for 16-bit operands or
  4069. if %@AB@%AH%@AE@% is not zero for 8-bit operands.%@NL@%
  4070. %@NL@%
  4071. ───────────────────────────────────────────────────────────────────────────%@NL@%
  4072. ┌───────────┐ ┌──────────────┐%@NL@%
  4073. │ 1111011%@AI@%w%@AE@%  │ │ %@AI@%mod%@AE@%, 100,%@AI@%r/m%@AE@% │     %@AI@%disp%@AE@% %@AI@%(0%@AE@% %@AI@%or%@AE@% %@AI@%2)%@AE@%%@NL@%
  4074. └───────────┘ └──────────────┘%@NL@%
  4075. ────────────────┬────────────────────────┬─────────────────────────────────%@NL@%
  4076.                 │ mul   bx               │ 88/86  b=70-77,w=118-113%@NL@%
  4077. %@AB@%MUL  %@AI@%reg%@AE@%        │ mul   dl               │   286  b=13,w=21%@NL@%
  4078.                 │                        │   386  b=9-14,w=9-22,d=9-38%@FN@%
  4079. %@FC@%2. The 80386 has an early-out multiplication algorithm. Therefore
  4080. %@FC@%multiplying an 8-bit or 16-bit value in %@AB@%EAX%@AE@% takes the same
  4081. %@FC@%time as multiplying the value in %@AB@%AL%@AE@% or %@AB@%AX%@AE@%.%@EF@%2%@NL@%
  4082. ────────────────┼────────────────────────┼─────────────────────────────────%@NL@%
  4083.                 │ mul   factor           │ 88/86  (b=76-83,w=124-139)+EA%@FN@%
  4084. %@FC@%1. Word memory operands on the 8088 take (128-143)+EA clocks.%@EF@%1%@NL@%
  4085. %@AB@%MUL  %@AI@%mem%@AE@%        │ mul   WORD PTR [bx]    │   286  b=16,w=24%@NL@%
  4086.                 │                        │   386  b=12-17,w=12-25,d=12-41%@FN@%
  4087. %@FC@%2. The 80386 has an early-out multiplication algorithm. Therefore
  4088. %@FC@%multiplying an 8-bit or 16-bit value in %@AB@%EAX%@AE@% takes the same
  4089. %@FC@%time as multiplying the value in %@AB@%AL%@AE@% or %@AB@%AX%@AE@%.%@EF@%2%@NL@%
  4090. ────────────────┴────────────────────────┴─────────────────────────────────%@NL@%
  4091. %@NL@%
  4092. %@NL@%
  4093. %@NL@%
  4094. %@3@%%@AB@%NEG%@AE@%%@CR:NEG       @%%@EH@%%@QR:neg@%%@NL@%
  4095. %@AB@%Two's Complement Negation%@AE@%%@QR:two's complement negation@%%@QR:negation@%%@NL@%
  4096. ┌───┬───┬───┬───┬───┬───┬───┬───┬───┐%@NL@%
  4097. │ O │ D │ I │ T │ S │ Z │ A │ P │ C │%@NL@%
  4098. ├───┼───┼───┼───┼───┼───┼───┼───┼───┤%@NL@%
  4099. │ ± │   │   │   │ ± │ ± │ ± │ ± │ ± │%@NL@%
  4100. └───┴───┴───┴───┴───┴───┴───┴───┴───┘%@NL@%
  4101. %@NL@%
  4102. %@4@%Replaces the operand with its two's complement. %@AB@%NEG%@AE@% does this%@EH@%
  4103. by subtracting the operand from 0. If the operand is 0, the
  4104. carry flag is cleared. Otherwise the carry flag is set. If the
  4105. operand contains the maximum possible negative value (-128 for
  4106. 8-bit operands or -32768 for 16-bit operands), the value does
  4107. not change, but the overflow and carry flags are set.%@NL@%
  4108. %@NL@%
  4109. ───────────────────────────────────────────────────────────────────────────%@NL@%
  4110. ┌───────────┐ ┌──────────────┐%@NL@%
  4111. │ 1111011%@AI@%w%@AE@%  │ │ %@AI@%mod%@AE@%, 011,%@AI@%r/m%@AE@% │     %@AI@%disp%@AE@% %@AI@%(0%@AE@% %@AI@%or%@AE@% %@AI@%2)%@AE@%%@NL@%
  4112. └───────────┘ └──────────────┘%@NL@%
  4113. ─────────────────┬─────────────────────────┬───────────────────────────────%@NL@%
  4114.                  │ neg   ax                │ 88/86     3%@NL@%
  4115. %@AB@%NEG  %@AI@%reg%@AE@%         │                         │   286     2%@NL@%
  4116.                  │                         │   386     2%@NL@%
  4117. ─────────────────┼─────────────────────────┼───────────────────────────────%@NL@%
  4118.                  │ neg   balance           │ 88/86     16+EA (W88=24+EA)%@NL@%
  4119. %@AB@%NEG  %@AI@%mem%@AE@%         │                         │   286     7%@NL@%
  4120.                  │                         │   386     6%@NL@%
  4121. ─────────────────┴─────────────────────────┴───────────────────────────────%@NL@%
  4122. %@NL@%
  4123. %@NL@%
  4124. %@CR:82        @%%@NL@%
  4125. %@3@%%@AB@%NOP%@AE@%%@CR:NOP       @%%@EH@%%@QR:nop@%%@NL@%
  4126. %@AB@%No Operation%@AE@%%@QR:no operation@%%@NL@%
  4127. ┌───┬───┬───┬───┬───┬───┬───┬───┬───┐%@NL@%
  4128. │ O │ D │ I │ T │ S │ Z │ A │ P │ C │%@NL@%
  4129. ├───┼───┼───┼───┼───┼───┼───┼───┼───┤%@NL@%
  4130. │   │   │   │   │   │   │   │   │   │%@NL@%
  4131. └───┴───┴───┴───┴───┴───┴───┴───┴───┘%@NL@%
  4132. %@NL@%
  4133. %@4@%Performs no operation. %@AB@%NOP%@AE@% can be used for timing %@EH@%
  4134. delays or alignment.%@NL@%
  4135. %@NL@%
  4136. ───────────────────────────────────────────────────────────────────────────%@NL@%
  4137. ┌────────────┐%@NL@%
  4138. │ 10010000%@FN@%
  4139. %@FC@%1. The encoding is the same as for %@AB@%XCHG AX,AX%@AE@%.%@EF@%1 │%@NL@%
  4140. └────────────┘%@NL@%
  4141. ─────────────────┬─────────────────────────┬───────────────────────────────%@NL@%
  4142.                  │ nop                     │ 88/86     3%@NL@%
  4143. %@AB@%NOP%@AE@%              │                         │   286     3%@NL@%
  4144.                  │                         │   386     3%@NL@%
  4145. ─────────────────┴─────────────────────────┴───────────────────────────────%@NL@%
  4146. %@NL@%
  4147. %@NL@%
  4148. %@NL@%
  4149. %@3@%%@AB@%NOT%@AE@%%@CR:NOT       @%%@EH@%%@QR:not@%%@NL@%
  4150. %@AB@%One's Complement Negation%@AE@%%@QR:one's complement negation@%%@QR:negation@%%@NL@%
  4151. ┌───┬───┬───┬───┬───┬───┬───┬───┬───┐%@NL@%
  4152. │ O │ D │ I │ T │ S │ Z │ A │ P │ C │%@NL@%
  4153. ├───┼───┼───┼───┼───┼───┼───┼───┼───┤%@NL@%
  4154. │   │   │   │   │   │   │   │   │   │%@NL@%
  4155. └───┴───┴───┴───┴───┴───┴───┴───┴───┘%@NL@%
  4156. %@NL@%
  4157. %@4@%Toggles each bit of the operand by clearing set bits%@EH@%
  4158. and setting cleared bits.%@NL@%
  4159. %@NL@%
  4160. ───────────────────────────────────────────────────────────────────────────%@NL@%
  4161. ┌───────────┐ ┌──────────────┐%@NL@%
  4162. │ 1111011%@AI@%w%@AE@%  │ │ %@AI@%mod%@AE@%, 010,r%@AI@%/m%@AE@% │     %@AI@%disp%@AE@% %@AI@%(0%@AE@% %@AI@%or%@AE@% %@AI@%2)%@AE@%%@NL@%
  4163. └───────────┘ └──────────────┘%@NL@%
  4164. ─────────────────┬─────────────────────────┬───────────────────────────────%@NL@%
  4165.                  │ not   ax                │ 88/86     3%@NL@%
  4166. %@AB@%NOT  %@AI@%reg%@AE@%         │                         │   286     2%@NL@%
  4167.                  │                         │   386     2%@NL@%
  4168. ─────────────────┼─────────────────────────┼───────────────────────────────%@NL@%
  4169.                  │ not   masker            │ 88/86     16+EA (W88=24+EA)%@NL@%
  4170. %@AB@%NOT  %@AI@%mem%@AE@%         │                         │   286     7%@NL@%
  4171.                  │                         │   386     6%@NL@%
  4172. ─────────────────┴─────────────────────────┴───────────────────────────────%@NL@%
  4173. %@NL@%
  4174. %@NL@%
  4175. %@CR:83        @%%@NL@%
  4176. %@3@%%@AB@%OR%@AE@%%@CR:OR        @%%@EH@%%@QR:or@%%@NL@%
  4177. %@AB@%Inclusive OR%@AE@%%@QR:inclusive or@%%@NL@%
  4178. ┌───┬───┬───┬───┬───┬───┬───┬───┬───┐%@NL@%
  4179. │ O │ D │ I │ T │ S │ Z │ A │ P │ C │%@NL@%
  4180. ├───┼───┼───┼───┼───┼───┼───┼───┼───┤%@NL@%
  4181. │ 0 │   │   │   │ ± │ ± │ ? │ ± │ 0 │%@NL@%
  4182. └───┴───┴───┴───┴───┴───┴───┴───┴───┘%@NL@%
  4183. %@NL@%
  4184. %@4@%Performs a bitwise logical OR on the source and destination %@EH@%
  4185. operands and stores the result to the destination operand. For
  4186. each bit position in the operands, if either or both bits are
  4187. set, the corresponding bit of the result it set. Otherwise, the
  4188. corresponding bit of the result is cleared.%@NL@%
  4189. %@NL@%
  4190. ───────────────────────────────────────────────────────────────────────────%@NL@%
  4191. ┌───────────┐ ┌───────────────┐%@NL@%
  4192. │ 000010%@AI@%dw%@AE@%  │ │ %@AI@%mod%@AE@%, %@AI@%reg%@AE@%, %@AI@%r/m%@AE@% │     %@AI@%disp%@AE@% %@AI@%(0%@AE@% %@AI@%or%@AE@% %@AI@%2)%@AE@%%@NL@%
  4193. └───────────┘ └───────────────┘%@NL@%
  4194. ─────────────────┬─────────────────────────┬───────────────────────────────%@NL@%
  4195.                  │ or    ax,dx             │ 88/86     3%@NL@%
  4196. %@AB@%OR  %@AI@%reg%@AE@%,%@AI@%reg%@AE@%      │                         │   286     2%@NL@%
  4197.                  │                         │   386     2%@NL@%
  4198. ─────────────────┼─────────────────────────┼───────────────────────────────%@NL@%
  4199.                  │ or    [bp+6],cx         │ 88/86     16+EA (W88=24+EA)%@NL@%
  4200. %@AB@%OR  %@AI@%mem%@AE@%,%@AI@%reg%@AE@%      │ or    bits,dx           │   286     7%@NL@%
  4201.                  │                         │   386     7%@NL@%
  4202. ─────────────────┼─────────────────────────┼───────────────────────────────%@NL@%
  4203.                  │ or    bx,masker         │ 88/86     9+EA (W88=13+EA)%@NL@%
  4204. %@AB@%OR  %@AI@%reg%@AE@%,%@AI@%mem%@AE@%      │ or    dx,color[di]      │   286     7%@NL@%
  4205.                  │                         │   386     6%@NL@%
  4206. ─────────────────┴─────────────────────────┴───────────────────────────────%@NL@%
  4207. ┌───────────┐ ┌──────────────┐%@NL@%
  4208. │ 100000%@AI@%sw%@AE@%  │ │ %@AI@%mod%@AE@%,001, %@AI@%r/m%@AE@% │     %@AI@%disp%@AE@% %@AI@%(0%@AE@% %@AI@%or%@AE@% %@AI@%2)%@AE@%     %@AI@%data%@AE@% %@AI@%(1%@AE@% %@AI@%or%@AE@% %@AI@%2)%@AE@%%@NL@%
  4209. └───────────┘ └──────────────┘%@NL@%
  4210. ─────────────────┬─────────────────────────┬───────────────────────────────%@NL@%
  4211.                  │ or    dx,110110b        │ 88/86     4%@NL@%
  4212. %@AB@%OR  %@AI@%reg%@AE@%,%@AI@%immed%@AE@%    │                         │   286     3%@NL@%
  4213.                  │                         │   386     2%@NL@%
  4214. ─────────────────┼─────────────────────────┼───────────────────────────────%@NL@%
  4215.                  │ or    flag_rec,8        │ 88/86     (b=17,w=25)+EA%@NL@%
  4216. %@AB@%OR  %@AI@%mem%@AE@%,%@AI@%immed%@AE@%    │                         │   286     7%@NL@%
  4217.                  │                         │   386     7%@NL@%
  4218. ─────────────────┴─────────────────────────┴───────────────────────────────%@NL@%
  4219. ┌───────────┐%@NL@%
  4220. │ 0000110%@AI@%w%@AE@%  │     %@AI@%data%@AE@% %@AI@%(1%@AE@% %@AI@%or%@AE@% %@AI@%2)%@AE@%%@NL@%
  4221. └───────────┘%@NL@%
  4222. ─────────────────┬─────────────────────────┬───────────────────────────────%@NL@%
  4223.                  │ or    ax,40h            │ 88/86     4%@NL@%
  4224. %@AB@%OR  %@AI@%accum%@AE@%,%@AI@%immed%@AE@%  │                         │   286     3%@NL@%
  4225.                  │                         │   386     2%@NL@%
  4226. ─────────────────┴─────────────────────────┴───────────────────────────────%@NL@%
  4227. %@NL@%
  4228. %@NL@%
  4229. %@CR:84        @%%@NL@%
  4230. %@3@%%@AB@%OUT%@AE@%%@CR:OUT       @%%@EH@%%@QR:out@%%@NL@%
  4231. %@AB@%Output to Port%@AE@%%@QR:output to port@%%@QR:port output@%%@NL@%
  4232. ┌───┬───┬───┬───┬───┬───┬───┬───┬───┐%@NL@%
  4233. │ O │ D │ I │ T │ S │ Z │ A │ P │ C │%@NL@%
  4234. ├───┼───┼───┼───┼───┼───┼───┼───┼───┤%@NL@%
  4235. │   │   │   │   │   │   │   │   │   │%@NL@%
  4236. └───┴───┴───┴───┴───┴───┴───┴───┴───┘%@NL@%
  4237. %@NL@%
  4238. %@4@%Transfers a byte or word (or a doubleword on the 80386)%@EH@%
  4239. to a port from the accumulator register. The port address
  4240. is specified by the destination operand, which can be %@AB@%DX%@AE@%
  4241. or an 8-bit constant. In privileged mode, a general
  4242. protection fault is generated if %@AB@%OUT%@AE@% is used when the
  4243. current protection level is greater than the value of
  4244. the IOPL flag.%@NL@%
  4245. %@NL@%
  4246. ───────────────────────────────────────────────────────────────────────────%@NL@%
  4247. ┌───────────┐%@NL@%
  4248. │ 1110011%@AI@%w%@AE@%  │     %@AI@%data%@AE@% %@AI@%(1)%@AE@%%@NL@%
  4249. └───────────┘%@NL@%
  4250. ─────────────────┬──────────────────────────┬──────────────────────────────%@NL@%
  4251.                  │ out   60h,al             │ 88/86     10 (88=14)%@NL@%
  4252. %@AB@%OUT %@AI@%immed8%@AE@%,%@AI@%accum%@AE@% │                          │   286     3%@NL@%
  4253.                  │                          │   386     10,pm=4,24%@FN@%
  4254. %@FC@%1. First protected-mode timing: CPL ≤ IOPL. Second
  4255. %@FC@%timing: CPL > IOPL.%@EF@%1%@NL@%
  4256. ─────────────────┼──────────────────────────┼──────────────────────────────%@NL@%
  4257. ┌───────────┐    │                          │%@NL@%
  4258. │ 1110111%@AI@%w%@AE@%  │    │                          │%@NL@%
  4259. └───────────┘    │                          │%@NL@%
  4260. ─────────────────┼──────────────────────────┼──────────────────────────────%@NL@%
  4261.                  │ out   dx,ax              │ 88/86     8 (88=12)%@NL@%
  4262. %@AB@%OUT  DX%@AE@%,%@AI@%accum%@AE@%    │ out   dx,al              │   286     3%@NL@%
  4263.                  │                          │   386     11,pm=5,25%@FN@%
  4264. %@FC@%1. First protected-mode timing: CPL ≤ IOPL. Second
  4265. %@FC@%timing: CPL > IOPL.%@EF@%1%@NL@%
  4266. ─────────────────┴──────────────────────────┴──────────────────────────────%@NL@%
  4267. %@NL@%
  4268. %@NL@%
  4269. %@CR:85        @%%@NL@%
  4270. %@3@%%@AB@%OUTS/OUTSB/OUTSW/OUTSD%@AE@%%@CR:OUTS      @%%@EH@%%@QR:outs@%%@QR:outsb@%%@QR:outsw@%%@QR:outsd@%%@NL@%
  4271. %@AB@%Output String to Port%@AE@%%@QR:output to port@%%@QR:string to port@%%@QR:output string to port@%%@QR:port output@%%@NL@%
  4272. %@AB@%80186/286/386 Only%@AE@%%@NL@%
  4273. ┌───┬───┬───┬───┬───┬───┬───┬───┬───┐%@NL@%
  4274. │ O │ D │ I │ T │ S │ Z │ A │ P │ C │%@NL@%
  4275. ├───┼───┼───┼───┼───┼───┼───┼───┼───┤%@NL@%
  4276. │   │   │   │   │   │   │   │   │   │%@NL@%
  4277. └───┴───┴───┴───┴───┴───┴───┴───┴───┘%@NL@%
  4278. %@NL@%
  4279. %@4@%Sends a string to a port. The string is considered the%@EH@%
  4280. source and must be pointed to by %@AB@%DS%@AE@%:%@AB@%SI%@AE@% (even if an operand
  4281. is given). The output port is specified in %@AB@%DX%@AE@%. For each
  4282. element sent, %@AB@%SI%@AE@% is adjusted according to the size of the
  4283. operand and the status of the direction flag. %@AB@%SI%@AE@% is
  4284. increased if the direction flag has been cleared with %@AB@%CLD%@AE@%
  4285. or decreased if the direction flag has been set with %@AB@%STD%@AE@%.%@NL@%
  4286. %@NL@%
  4287. %@4@%If the %@AB@%OUTS%@AE@% form of the instruction is used, an operand%@EH@%
  4288. must be provided to indicate the size of data elements to
  4289. be sent. A segment override can be given. If %@AB@%OUTSB%@AE@% (bytes),
  4290. %@AB@%OUTSW%@AE@% (words), or %@AB@%OUTSD%@AE@% (doublewords on the 80386 only) is
  4291. used, the instruction determines the size of the data
  4292. elements to be sent. No operand is allowed.%@NL@%
  4293. %@NL@%
  4294. %@4@%%@AB@%OUTS%@AE@% and its variations are usually used with the %@AB@%REP%@AE@%%@EH@%
  4295. prefix. Before the instruction is executed, %@AB@%CX%@AE@% should
  4296. contain the number of elements to send. In privileged mode,
  4297. a general protection fault is generated if %@AB@%OUTS%@AE@% is used
  4298. when the current protection level is greater than the value
  4299. of the IOPL flag.%@NL@%
  4300. %@NL@%
  4301. ───────────────────────────────────────────────────────────────────────────%@NL@%
  4302. ┌───────────┐%@NL@%
  4303. │ 0110111%@AI@%w%@AE@%  │%@NL@%
  4304. └───────────┘%@NL@%
  4305. ─────────────────────────┬─────────────────────┬───────────────────────────%@NL@%
  4306. %@AB@%OUTS  DX%@AE@%, «%@AI@%segreg%@AB@%:%@AE@%»%@AI@%src%@AE@%   │ rep  outs  dx,buffer│ 88/86     ─%@NL@%
  4307. %@AB@%OUTSB%@AE@%                    │ outsb               │   286     5%@NL@%
  4308. %@AB@%OUTSW%@AE@%                    │ rep  outw           │   386     14,pm=8,28%@FN@%
  4309. %@FC@%1. First protected-mode timing: CPL ≤ IOPL. Second
  4310. %@FC@%timing: CPL > IOPL.%@EF@%1%@NL@%
  4311. %@CR:86        @%─────────────────────────┴─────────────────────┴───────────────────────────%@NL@%
  4312. %@NL@%
  4313. %@NL@%
  4314. %@NL@%
  4315. %@3@%%@AB@%POP%@AE@%%@CR:POP       @%%@EH@%%@QR:pop@%%@NL@%
  4316. %@AB@%Pop%@AE@%%@NL@%
  4317. ┌───┬───┬───┬───┬───┬───┬───┬───┬───┐%@NL@%
  4318. │ O │ D │ I │ T │ S │ Z │ A │ P │ C │%@NL@%
  4319. ├───┼───┼───┼───┼───┼───┼───┼───┼───┤%@NL@%
  4320. │   │   │   │   │   │   │   │   │   │%@NL@%
  4321. └───┴───┴───┴───┴───┴───┴───┴───┴───┘%@NL@%
  4322. %@NL@%
  4323. %@4@%Pops the top of the stack into the destination operand.%@EH@%
  4324. This means that the value at %@AB@%SS%@AE@%:%@AB@%SP%@AE@% is copied to the
  4325. destination operand and %@AB@%SP%@AE@% is increased by 2. The
  4326. destination operand can be a memory location, a general
  4327. purpose 16-bit register, or any segment register except %@AB@%CS%@AE@%.
  4328. Use %@AB@%RET%@AE@% to pop %@AB@%CS%@AE@%. On the 80386, 32-bit values can be
  4329. popped by giving a 32-bit operand. %@AB@%ESP%@AE@% is increased by 4
  4330. for 32-bit pops.%@NL@%
  4331. %@NL@%
  4332. ───────────────────────────────────────────────────────────────────────────%@NL@%
  4333. ┌────────────┐%@NL@%
  4334. │ 01011 %@AI@%reg%@AE@%  │%@NL@%
  4335. └────────────┘%@NL@%
  4336. ───────────────┬─────────────────────────┬─────────────────────────────────%@NL@%
  4337. %@AB@%POP  %@AI@%reg16%@AE@%     │ pop   cx                │ 88/86     8 (88=12)%@NL@%
  4338. %@AB@%POP  %@AI@%reg32%@AE@%%@FN@%
  4339. %@FC@%1. 80386 only.%@EF@%1   │                         │   286     5%@NL@%
  4340.                │                         │   386     4%@NL@%
  4341. ───────────────┴─────────────────────────┴─────────────────────────────────%@NL@%
  4342. ┌────────────┐ ┌──────────────┐%@NL@%
  4343. │ 10001111   │ │ %@AI@%mod%@AE@%, 000,%@AI@%r/m%@AE@% │     %@AI@%disp%@AE@% %@AI@%(2)%@AE@%%@NL@%
  4344. └────────────┘ └──────────────┘%@NL@%
  4345. ───────────────┬─────────────────────────┬─────────────────────────────────%@NL@%
  4346. %@AB@%POP  %@AI@%mem16%@AE@%     │ pop   param             │ 88/86     17+EA (88=25+EA)%@NL@%
  4347. %@AB@%POP  %@AI@%mem32%@AE@%%@FN@%
  4348. %@FC@%1. 80386 only.%@EF@%1   │                         │   286     5%@NL@%
  4349.                │                         │   386     5%@NL@%
  4350. ───────────────┴─────────────────────────┴─────────────────────────────────%@NL@%
  4351. ┌────────────┐%@NL@%
  4352. │000,%@AI@%sreg%@AE@%,111│%@NL@%
  4353. └────────────┘%@NL@%
  4354. ─────────────────┬─────────────────────────┬───────────────────────────────%@NL@%
  4355.                  │ pop   es                │ 88/86     8 (88=12)%@NL@%
  4356. %@AB@%POP  %@AI@%segreg%@AE@%      │ pop   ds                │   286     5,pm=20%@NL@%
  4357.                  │ pop   ss                │   386     7,pm=21%@NL@%
  4358. ─────────────────┴─────────────────────────┴───────────────────────────────%@NL@%
  4359. ┌────────────┐ ┌─────────────┐%@NL@%
  4360. │ 00001111   │ │ 10,%@AI@%sreg%@AE@%,001 │%@NL@%
  4361. └────────────┘ └─────────────┘%@NL@%
  4362. ─────────────────┬─────────────────────────┬───────────────────────────────%@NL@%
  4363.                  │ pop   fs                │ 88/86     ─%@NL@%
  4364. %@AB@%POP  %@AI@%segreg%@AE@%%@FN@%
  4365. %@FC@%1. 80386 only.%@EF@%1    │ pop   gs                │   286     ─%@NL@%
  4366.                  │                         │   386     7,pm=21%@NL@%
  4367. ─────────────────┴─────────────────────────┴───────────────────────────────%@NL@%
  4368. %@NL@%
  4369. %@NL@%
  4370. %@CR:87        @%%@NL@%
  4371. %@3@%%@AB@%POPA/POPAD%@AE@%%@CR:POPA      @%%@EH@%%@QR:popa@%%@QR:popad@%%@NL@%
  4372. %@AB@%Pop All%@AE@%%@QR:pop all@%%@NL@%
  4373. %@AB@%80186/286/386 Only%@AE@%%@NL@%
  4374. ┌───┬───┬───┬───┬───┬───┬───┬───┬───┐%@NL@%
  4375. │ O │ D │ I │ T │ S │ Z │ A │ P │ C │%@NL@%
  4376. ├───┼───┼───┼───┼───┼───┼───┼───┼───┤%@NL@%
  4377. │   │   │   │   │   │   │   │   │   │%@NL@%
  4378. └───┴───┴───┴───┴───┴───┴───┴───┴───┘%@NL@%
  4379. %@NL@%
  4380. %@4@%Pops the top 16 bytes on the stack into the eight general-%@EH@%
  4381. purpose registers. The registers are popped in the following
  4382. order: %@AB@%DI%@AE@%, %@AB@%SI%@AE@%, %@AB@%BP%@AE@%, %@AB@%SP%@AE@%, %@AB@%BX%@AE@%, %@AB@%DX%@AE@%, %@AB@%CX%@AE@%, %@AB@%AX%@AE@%. The value for the %@AB@%SP%@AE@%
  4383. register is actually discarded rather than copied to %@AB@%SP%@AE@%.
  4384. %@AB@%POPA%@AE@% always pops into 16-bit registers. On the 80386, use
  4385. %@AB@%POPAD%@AE@% to pop into 32-bit registers.%@NL@%
  4386. %@NL@%
  4387. ───────────────────────────────────────────────────────────────────────────%@NL@%
  4388. ┌───────────┐%@NL@%
  4389. │ 01100001  │%@NL@%
  4390. └───────────┘%@NL@%
  4391. ─────────────────┬─────────────────────────┬───────────────────────────────%@NL@%
  4392. %@AB@%POPA%@AE@%             │ popa                    │ 88/86     ─%@NL@%
  4393. %@AB@%POPAD%@AE@%%@FN@%
  4394. %@FC@%1. 80386 only.%@EF@%1          │                         │   286     19%@NL@%
  4395.                  │                         │   386     24%@NL@%
  4396. ─────────────────┴─────────────────────────┴───────────────────────────────%@NL@%
  4397. %@NL@%
  4398. %@NL@%
  4399. %@NL@%
  4400. %@3@%%@AB@%POPF/POPFD%@AE@%%@CR:POPF      @%%@EH@%%@QR:popf@%%@QR:popfd@%%@NL@%
  4401. %@AB@%Pop Flags%@AE@%%@QR:pop flags@%%@NL@%
  4402. ┌───┬───┬───┬───┬───┬───┬───┬───┬───┐%@NL@%
  4403. │ O │ D │ I │ T │ S │ Z │ A │ P │ C │%@NL@%
  4404. ├───┼───┼───┼───┼───┼───┼───┼───┼───┤%@NL@%
  4405. │ ± │ ± │ ± │ ± │ ± │ ± │ ± │ ± │ ± │%@NL@%
  4406. └───┴───┴───┴───┴───┴───┴───┴───┴───┘%@NL@%
  4407. %@NL@%
  4408. %@4@%Pops the value on the top of the stack into the flags%@EH@%
  4409. register. %@AB@%POPF%@AE@% always pops into the 16-bit flags register.
  4410. On the 80386, use %@AB@%POPFD%@AE@% to pop into the 32-bit flags
  4411. register.%@NL@%
  4412. %@NL@%
  4413. ───────────────────────────────────────────────────────────────────────────%@NL@%
  4414. ┌───────────┐%@NL@%
  4415. │ 10011101  │%@NL@%
  4416. └───────────┘%@NL@%
  4417. ─────────────────┬─────────────────────────┬───────────────────────────────%@NL@%
  4418. %@AB@%POPF%@AE@%             │ popf                    │ 88/86     8 (88=12)%@NL@%
  4419. %@AB@%POPFD%@AE@%%@FN@%
  4420. %@FC@%1. 80386 only.%@EF@%1          │                         │   286     5%@NL@%
  4421.                  │                         │   386     5%@NL@%
  4422. ─────────────────┴─────────────────────────┴───────────────────────────────%@NL@%
  4423. %@NL@%
  4424. %@NL@%
  4425. %@CR:88        @%%@NL@%
  4426. %@3@%%@AB@%PUSH%@AE@%%@CR:PUSH      @%%@EH@%%@QR:push@%%@NL@%
  4427. %@AB@%Push%@AE@%%@NL@%
  4428. ┌───┬───┬───┬───┬───┬───┬───┬───┬───┐%@NL@%
  4429. │ O │ D │ I │ T │ S │ Z │ A │ P │ C │%@NL@%
  4430. ├───┼───┼───┼───┼───┼───┼───┼───┼───┤%@NL@%
  4431. │   │   │   │   │   │   │   │   │   │%@NL@%
  4432. └───┴───┴───┴───┴───┴───┴───┴───┴───┘%@NL@%
  4433. %@NL@%
  4434. %@4@%Pushes the source operand onto the stack. This means that %@AB@%SP%@AE@%%@EH@%
  4435. is decreased by 2 and the source value is copied to %@AB@%SS%@AE@%:%@AB@%SP%@AE@%.
  4436. The operand can be a memory location, a general purpose 16-bit
  4437. register, or a segment register. On the 80186-80386 processors,
  4438. the operand can also be a constant. On the 80386, 32-bit values
  4439. can be pushed by giving a 32-bit operand. %@AB@%ESP%@AE@% is decreased by
  4440. 4 for 32-bit pushes. On the 8088 and 8086, %@AB@%PUSH SP%@AE@% copies the
  4441. value of %@AB@%SP%@AE@% after the push. On the 80186-80386 processors,
  4442. %@AB@%PUSH SP%@AE@% copies the value of %@AB@%SP%@AE@% before the push.%@NL@%
  4443. %@NL@%
  4444. ───────────────────────────────────────────────────────────────────────────%@NL@%
  4445. ┌────────────┐%@NL@%
  4446. │ 01010 %@AI@%reg%@AE@%  │%@NL@%
  4447. └────────────┘%@NL@%
  4448. ───────────────┬─────────────────────────┬─────────────────────────────────%@NL@%
  4449. %@AB@%PUSH %@AI@%reg16%@AE@%     │ push  dx                │ 88/86     11 (88=15)%@NL@%
  4450. %@AB@%PUSH %@AI@%reg32%@AE@%%@FN@%
  4451. %@FC@%1. 80386 only.%@EF@%1   │                         │   286     3%@NL@%
  4452.                │                         │   386     2%@NL@%
  4453. ───────────────┴─────────────────────────┴─────────────────────────────────%@NL@%
  4454. ┌────────────┐ ┌──────────────┐%@NL@%
  4455. │ 11111111   │ │ %@AI@%mod%@AE@%, 110,%@AI@%r/m%@AE@% │     %@AI@%disp%@AE@% %@AI@%(2)%@AE@%%@NL@%
  4456. └────────────┘ └──────────────┘%@NL@%
  4457. ──────────────┬──────────────────────────┬─────────────────────────────────%@NL@%
  4458. %@AB@%PUSH %@AI@%mem16%@AE@%    │ push  [di]               │ 88/86     16+EA (88=24+EA)%@NL@%
  4459. %@AB@%PUSH %@AI@%mem32%@AE@%%@FN@%
  4460. %@FC@%1. 80386 only.%@EF@%1  │ push  fcount             │   286     5%@NL@%
  4461.               │                          │   386     5%@NL@%
  4462. ──────────────┴──────────────────────────┴─────────────────────────────────%@NL@%
  4463. ┌────────────┐%@NL@%
  4464. │00,%@AI@%sreg%@AE@%,110 │%@NL@%
  4465. └────────────┘%@NL@%
  4466. ─────────────────┬─────────────────────────┬───────────────────────────────%@NL@%
  4467.                  │ push  es                │ 88/86     10 (88=14)%@NL@%
  4468. %@AB@%PUSH  %@AI@%segreg%@AE@%     │ push  ss                │   286     3%@NL@%
  4469.                  │ push  cs                │   386     2%@NL@%
  4470. ─────────────────┴─────────────────────────┴───────────────────────────────%@NL@%
  4471. ┌───────────┐ ┌─────────────┐%@NL@%
  4472. │ 00001111  │ │ 10,%@AI@%sreg%@AE@%,000 │%@NL@%
  4473. └───────────┘ └─────────────┘%@NL@%
  4474. ─────────────────┬─────────────────────────┬───────────────────────────────%@NL@%
  4475.                  │ push  fs                │ 88/86     ─%@NL@%
  4476. %@AB@%PUSH  %@AI@%segreg%@AE@%     │ push  gs                │   286     ─%@NL@%
  4477.                  │                         │   386     2%@NL@%
  4478. ─────────────────┴─────────────────────────┴───────────────────────────────%@NL@%
  4479. ┌───────────┐%@NL@%
  4480. │ 011010%@AI@%s%@AE@%0  │     %@AI@%data%@AE@% %@AI@%(1%@AE@% %@AI@%or%@AE@% %@AI@%2)%@AE@%%@NL@%
  4481. └───────────┘%@NL@%
  4482. ─────────────────┬─────────────────────────┬───────────────────────────────%@NL@%
  4483.                  │ push  'a'               │ 88/86     ─%@NL@%
  4484. %@AB@%PUSH  %@AI@%immed%@AE@%      │ push  15000             │   286     3%@NL@%
  4485.                  │                         │   386     2%@NL@%
  4486. ─────────────────┴─────────────────────────┴───────────────────────────────%@NL@%
  4487. %@NL@%
  4488. %@NL@%
  4489. %@CR:89        @%%@NL@%
  4490. %@3@%%@AB@%PUSHA/PUSHAD%@AE@%%@CR:PUSHA     @%%@EH@%%@QR:pusha@%%@QR:pushad@%%@NL@%
  4491. %@AB@%Push All%@AE@%%@QR:push all@%%@NL@%
  4492. %@AB@%80186/286/386 Only%@AE@%%@NL@%
  4493. ┌───┬───┬───┬───┬───┬───┬───┬───┬───┐%@NL@%
  4494. │ O │ D │ I │ T │ S │ Z │ A │ P │ C │%@NL@%
  4495. ├───┼───┼───┼───┼───┼───┼───┼───┼───┤%@NL@%
  4496. │   │   │   │   │   │   │   │   │   │%@NL@%
  4497. └───┴───┴───┴───┴───┴───┴───┴───┴───┘%@NL@%
  4498. %@NL@%
  4499. %@4@%Pushes the general-purpose registers onto the stack. The%@EH@%
  4500. registers are pushed in the following order: %@AB@%AX%@AE@%, %@AB@%CX%@AE@%, %@AB@%DX%@AE@%,
  4501. %@AB@%BX%@AE@%, %@AB@%SP%@AE@%, %@AB@%BP%@AE@%, %@AB@%SI%@AE@%, %@AB@%DI%@AE@%. The value pushed for %@AB@%SP%@AE@% is the value
  4502. before the instruction. %@AB@%PUSHA%@AE@% always pushes 16-bit registers.
  4503. On the 80386, you can use %@AB@%PUSHAD%@AE@% to push 32-bit registers.%@NL@%
  4504. %@NL@%
  4505. ───────────────────────────────────────────────────────────────────────────%@NL@%
  4506. ┌───────────┐%@NL@%
  4507. │ 01100000  │%@NL@%
  4508. └───────────┘%@NL@%
  4509. ─────────────────┬─────────────────────────┬───────────────────────────────%@NL@%
  4510. %@AB@%PUSHA%@AE@%            │ pusha                   │ 88/86     ─%@NL@%
  4511. %@AB@%PUSHAD%@AE@%%@FN@%
  4512. %@FC@%1. 80386 only.%@EF@%1         │                         │   286     17%@NL@%
  4513.                  │                         │   386     18%@NL@%
  4514. ─────────────────┴─────────────────────────┴───────────────────────────────%@NL@%
  4515. %@NL@%
  4516. %@NL@%
  4517. %@NL@%
  4518. %@3@%%@AB@%PUSHF/PUSHFD%@AE@%%@CR:PUSHF     @%%@EH@%%@QR:pushf@%%@QR:pushfd@%%@NL@%
  4519. %@AB@%Push Flags%@AE@%%@QR:push flags@%%@NL@%
  4520. ┌───┬───┬───┬───┬───┬───┬───┬───┬───┐%@NL@%
  4521. │ O │ D │ I │ T │ S │ Z │ A │ P │ C │%@NL@%
  4522. ├───┼───┼───┼───┼───┼───┼───┼───┼───┤%@NL@%
  4523. │   │   │   │   │   │   │   │   │   │%@NL@%
  4524. └───┴───┴───┴───┴───┴───┴───┴───┴───┘%@NL@%
  4525. %@NL@%
  4526. %@4@%Pushes the flags register onto the stack. %@AB@%PUSHF%@AE@% %@EH@%
  4527. always pushes the 16-bit flags register. On the 80386, use
  4528. %@AB@%PUSHFD%@AE@% to push the 32-bit flags register.%@NL@%
  4529. %@NL@%
  4530. ───────────────────────────────────────────────────────────────────────────%@NL@%
  4531. ┌───────────┐%@NL@%
  4532. │ 10011100  │%@NL@%
  4533. └───────────┘%@NL@%
  4534. ─────────────────┬─────────────────────────┬───────────────────────────────%@NL@%
  4535. %@AB@%PUSHF%@AE@%            │ pushf                   │ 88/86     10 (88=14)%@NL@%
  4536. %@AB@%PUSHFD%@AE@%%@FN@%
  4537. %@FC@%1. 80386 only.%@EF@%1         │                         │   286     3%@NL@%
  4538.                  │                         │   386     4%@NL@%
  4539. ─────────────────┴─────────────────────────┴───────────────────────────────%@NL@%
  4540. %@NL@%
  4541. %@NL@%
  4542. %@CR:90        @%%@NL@%
  4543. %@3@%%@AB@%RCL/RCR/ROL/ROR%@AE@%%@CR:RCL       @%%@EH@%%@QR:rcl@%%@QR:rcr@%%@QR:rol@%%@QR:ror@%%@NL@%
  4544. %@AB@%Rotate%@AE@%%@QR:rotate@%%@NL@%
  4545. ┌───┬───┬───┬───┬───┬───┬───┬───┬───┐%@NL@%
  4546. │ O │ D │ I │ T │ S │ Z │ A │ P │ C │%@NL@%
  4547. ├───┼───┼───┼───┼───┼───┼───┼───┼───┤%@NL@%
  4548. │ ± │   │   │   │   │   │   │   │ ± │%@NL@%
  4549. └───┴───┴───┴───┴───┴───┴───┴───┴───┘%@NL@%
  4550. %@NL@%
  4551. %@4@%Rotates the bits in the destination operand the number of%@EH@%
  4552. times specified in the source operand. %@AB@%RCL%@AE@% and %@AB@%ROL%@AE@% rotate
  4553. the bits left; %@AB@%RCR%@AE@% and %@AB@%ROR%@AE@% rotate right.%@NL@%
  4554. %@NL@%
  4555. %@4@%%@AB@%ROL%@AE@% and %@AB@%ROR%@AE@% rotate the number of bits in the operand. For%@EH@%
  4556. each rotation, the leftmost or rightmost bit is copied to
  4557. the carry flag as well as rotated. %@AB@%RCL%@AE@% and %@AB@%RCR%@AE@% rotate
  4558. through the carry flag. The carry flag becomes an extension
  4559. of the operand so that a 9-bit rotation is done for 8-bit
  4560. operands, or a 17-bit rotation for 16-bit operands.%@NL@%
  4561. %@NL@%
  4562. %@4@%On the 8088 and 8086, the source operand can be either %@AB@%CL%@AE@%%@EH@%
  4563. or 1. On the 80186-80386, the source operand can be %@AB@%CL %@AE@%or
  4564. an 8-bit constant. On the 80186-80386, rotate counts larger
  4565. than 31 are masked off, but on the 8088 and 8086, larger
  4566. rotate counts are performed despite the inefficiency involved.
  4567. The overflow flag is only modified by single-bit variations
  4568. of the instruction; for multiple-bit variations it is 
  4569. undefined.%@NL@%
  4570. %@NL@%
  4571. ───────────────────────────────────────────────────────────────────────────%@NL@%
  4572. ┌───────────┐ ┌───────────────┐%@NL@%
  4573. │ 1101000%@AI@%w%@AE@%  │ │ %@AI@%mod%@AE@%, %@AI@%TTT%@AE@%%@FN@%
  4574. %@FC@%1. %@AI@%TTT%@AE@% represents one of the following bit codes: 000 for
  4575. %@FC@%%@AB@%ROL%@AE@%, 001 for %@AB@%ROR%@AE@%, 010 for %@AB@%RCL%@AE@%, or 011 for
  4576. %@FC@%%@AB@%RCR%@AE@%.%@EF@%1,%@AI@%r/%@AE@%m│     %@AI@%disp%@AE@% %@AI@%(0%@AE@% %@AI@%or%@AE@% %@AI@%2)%@AE@%%@NL@%
  4577. └───────────┘ └───────────────┘%@NL@%
  4578. ────────────────┬─────────────────────────┬────────────────────────────────%@NL@%
  4579. %@AB@%ROL %@AI@%reg%@AE@%,%@AB@%1%@AE@%       │ ror   ax,1              │ 88/86   2%@NL@%
  4580. %@AB@%ROR %@AI@%reg%@AE@%,%@AB@%1%@AE@%       │ rol   dl,1              │   286   2%@NL@%
  4581.                 │                         │   386   3%@NL@%
  4582. ────────────────┼─────────────────────────┼────────────────────────────────%@NL@%
  4583. %@AB@%RCL %@AI@%reg%@AE@%,%@AB@%1%@AE@%       │ rcl   dx,1              │ 88/86   2%@NL@%
  4584. %@AB@%RCR %@AI@%reg%@AE@%,%@AB@%1%@AE@%       │ rcr   bl,1              │   286   2%@NL@%
  4585.                 │                         │   386   9%@NL@%
  4586. ────────────────┼─────────────────────────┼────────────────────────────────%@NL@%
  4587. %@AB@%ROL %@AI@%mem%@AE@%,%@AB@%1%@AE@%       │ ror   bits,1            │ 88/86   15+EA (W88=23+EA)%@NL@%
  4588. %@AB@%ROR %@AI@%mem%@AE@%,%@AB@%1%@AE@%       │ rol   WORD PTR [bx],1   │   286   7%@NL@%
  4589.                 │                         │   386   7%@NL@%
  4590. ────────────────┼─────────────────────────┼────────────────────────────────%@NL@%
  4591. %@AB@%RCL %@AI@%mem%@AB@%,1%@AE@%       │ rcl   WORD PTR [si],1   │ 88/86   15+EA (W88=23+EA)%@NL@%
  4592. %@AB@%RCR %@AI@%mem%@AB@%,1%@AE@%       │ rcr   WORD PTR m32[0],1 │   286   7%@NL@%
  4593.                 │                         │   386   10%@NL@%
  4594. %@CR:91        @%────────────────┴─────────────────────────┴───────────────────────────────%@NL@%
  4595. ┌───────────┐ ┌───────────────┐%@NL@%
  4596. │ 1101001%@AI@%w%@AE@%  │ │ %@AI@%mod%@AE@%, %@AI@%TTT%@AE@%%@FN@%
  4597. %@FC@%1. %@AI@%TTT%@AE@% represents one of the following bit codes: 000 for
  4598. %@FC@%%@AB@%ROL%@AE@%, 001 for %@AB@%ROR%@AE@%, 010 for %@AB@%RCL%@AE@%, or 011 for
  4599. %@FC@%%@AB@%RCR%@AE@%.%@EF@%1,%@AI@%r/m%@AE@%│     %@AI@%disp%@AE@% %@AI@%(0%@AE@% %@AI@%or%@AE@% %@AI@%2)%@AE@%%@NL@%
  4600. └───────────┘ └───────────────┘%@NL@%
  4601. ────────────────┬─────────────────────────┬────────────────────────────────%@NL@%
  4602. %@AB@%ROL  %@AI@%reg%@AE@%,%@AB@%CL%@AE@%     │ ror   ax,cl             │ 88/86   8+4n%@NL@%
  4603. %@AB@%ROR  %@AI@%reg%@AE@%,%@AB@%CL%@AE@%     │ rol   dx,cl             │   286   5+n%@NL@%
  4604.                 │                         │   386   3%@NL@%
  4605. ────────────────┼─────────────────────────┼────────────────────────────────%@NL@%
  4606. %@AB@%RCL  %@AI@%reg,%@AB@%CL%@AE@%     │ rcl   dx,cl             │ 88/86   8+4n%@NL@%
  4607. %@AB@%RCR  %@AI@%reg,%@AB@%CL%@AE@%     │ rcr   bl,cl             │   286   5+n%@NL@%
  4608.                 │                         │   386   9%@NL@%
  4609. ────────────────┼─────────────────────────┼────────────────────────────────%@NL@%
  4610. %@AB@%ROL  %@AI@%mem,%@AB@%CL%@AE@%     │ ror   color,cl          │ 88/86   20+EA+4n (W88=28+EA+4n)%@NL@%
  4611. %@AB@%ROR  %@AI@%mem,%@AB@%CL%@AE@%     │ rol   WORD PTR [bp+6],cl│   286   8+n%@NL@%
  4612.                 │                         │   386   7%@NL@%
  4613. ────────────────┼─────────────────────────┼────────────────────────────────%@NL@%
  4614. %@AB@%RCL  %@AI@%mem,%@AB@%CL%@AE@%     │ rcr  WORD PTR [bx+di],cl│ 88/86   20+EA+4n (W88=28+EA+4n)%@NL@%
  4615. %@AB@%RCR  %@AI@%mem,%@AB@%CL%@AE@%     │ rcl  masker             │   286   8+n%@NL@%
  4616.                 │                         │   386   10%@NL@%
  4617. ────────────────┴─────────────────────────┴────────────────────────────────%@NL@%
  4618. ┌───────────┐ ┌──────────────┐%@NL@%
  4619. │ 1100000%@AI@%w%@AE@%  │ │ %@AI@%mod%@AE@%,%@AI@%TTT%@AE@%%@FN@%
  4620. %@FC@%1. %@AI@%TTT%@AE@% represents one of the following bit codes: 000 for
  4621. %@FC@%%@AB@%ROL%@AE@%, 001 for %@AB@%ROR%@AE@%, 010 for %@AB@%RCL%@AE@%, or 011 for
  4622. %@FC@%%@AB@%RCR%@AE@%.%@EF@%1,%@AI@%r/m%@AE@%│     %@AI@%disp%@AE@% %@AI@%(0%@AE@% %@AI@%or%@AE@% %@AI@%2)%@AE@%     %@AI@%data%@AE@% %@AI@%(1)%@AE@%%@NL@%
  4623. └───────────┘ └──────────────┘%@NL@%
  4624. ─────────────────┬─────────────────────────┬───────────────────────────────%@NL@%
  4625. %@AB@%ROL  %@AI@%reg,immed8%@AE@%  │ rol   ax,13             │ 88/86   ─%@NL@%
  4626. %@AB@%ROR  %@AI@%reg,immed8%@AE@%  │ ror   bl,3              │   286   5+n%@NL@%
  4627.                  │                         │   386   3%@NL@%
  4628. ─────────────────┼─────────────────────────┼───────────────────────────────%@NL@%
  4629. %@AB@%RCL  %@AI@%reg,immed8%@AE@%  │ rcl   bx,5              │ 88/86   ─%@NL@%
  4630. %@AB@%RCR  %@AI@%reg,immed8%@AE@%  │ rcr   si,9              │   286   5+n%@NL@%
  4631.                  │                         │   386   9%@NL@%
  4632. ─────────────────┼─────────────────────────┼───────────────────────────────%@NL@%
  4633. %@AB@%ROL  %@AI@%mem,immed8%@AE@%  │ rol   BYTE PTR [bx],10  │ 88/86   ─%@NL@%
  4634. %@AB@%ROR  %@AI@%mem,immed8%@AE@%  │ ror   bits,6            │   286   8+n%@NL@%
  4635.                  │                         │   386   7%@NL@%
  4636. ─────────────────┼─────────────────────────┼───────────────────────────────%@NL@%
  4637. %@AB@%RCL  %@AI@%mem,immed8%@AE@%  │ rcl   WORD PTR [bp+8],5 │ 88/86   ─%@NL@%
  4638. %@AB@%RCR  %@AI@%mem,immed8%@AE@%  │ rcr   masker,3          │   286   8+n%@NL@%
  4639.                  │                         │   386   10%@NL@%
  4640. ─────────────────┴─────────────────────────┴───────────────────────────────%@NL@%
  4641. %@NL@%
  4642. %@NL@%
  4643. %@CR:92        @%%@NL@%
  4644. %@3@%%@AB@%REP%@AE@%%@CR:REP       @%%@EH@%%@QR:rep@%%@NL@%
  4645. %@AB@%Repeat String%@AE@%%@QR:repeat string@%%@NL@%
  4646. ┌───┬───┬───┬───┬───┬───┬───┬───┬───┐%@NL@%
  4647. │ O │ D │ I │ T │ S │ Z │ A │ P │ C │%@NL@%
  4648. ├───┼───┼───┼───┼───┼───┼───┼───┼───┤%@NL@%
  4649. │   │   │   │   │   │   │   │   │   │%@NL@%
  4650. └───┴───┴───┴───┴───┴───┴───┴───┴───┘%@NL@%
  4651. %@NL@%
  4652. %@4@%Repeats the string instruction the number of times indicated%@EH@%
  4653. by %@AB@%CX%@AE@%. For each string element, the string instruction is
  4654. performed and %@AB@%CX%@AE@% is decremented. When %@AB@%CX%@AE@% reaches 0, execution
  4655. continues with the next instruction. %@AB@%REP%@AE@% is normally used
  4656. with %@AB@%MOVS%@AE@% and %@AB@%STOS%@AE@%. (%@AB@%REP LODS%@AE@% is legal, but has the same
  4657. effect as %@AB@%LODS%@AE@%.) %@AB@%REP%@AE@% is additionally used with %@AB@%INS%@AE@% and %@AB@%OUTS%@AE@%
  4658. on the 80186-80386 processors. On all processors except the
  4659. 80386, combining a repeat prefix with a segment override may
  4660. cause errors if an interrupt occurs during a string operation.%@NL@%
  4661. %@NL@%
  4662. ───────────────────────────────────────────────────────────────────────────%@NL@%
  4663. ┌───────────┐ ┌───────────┐%@NL@%
  4664. │ 11110010  │ │1010010%@AI@%w%@AE@%   │%@NL@%
  4665. └───────────┘ └───────────┘%@NL@%
  4666. ───────────────────┬─────────────────────────┬─────────────────────────────%@NL@%
  4667. %@AB@%REP  MOVS %@AI@%dest%@AB@%,%@AI@%src%@AE@% │ rep   movs source,destin│ 88/86  9+17n (W88=9+25n)%@NL@%
  4668. %@AB@%REP  MOVSB%@AE@%         │ rep   movsw             │   286  5+4n%@NL@%
  4669. %@AB@%REP  MOVSW%@AE@%         │                         │   386  7+4n%@NL@%
  4670. ───────────────────┴─────────────────────────┴─────────────────────────────%@NL@%
  4671. ┌───────────┐ ┌───────────┐%@NL@%
  4672. │ 11110010  │ │ 1010101%@AI@%w%@AE@%  │%@NL@%
  4673. └───────────┘ └───────────┘%@NL@%
  4674. ───────────────────┬─────────────────────────┬─────────────────────────────%@NL@%
  4675. %@AB@%REP  STOS %@AI@%dest%@AE@%     │ rep   stosb             │ 88/86  9+10n (W88=9+14n)%@NL@%
  4676. %@AB@%REP  STOSB%@AE@%         │ rep   stos destin       │   286  4+3n%@NL@%
  4677. %@AB@%REP  STOSW%@AE@%         │                         │   386  5+5n%@NL@%
  4678. ───────────────────┴─────────────────────────┴─────────────────────────────%@NL@%
  4679. ┌───────────┐ ┌───────────┐%@NL@%
  4680. │ 11110010  │ │ 0110110%@AI@%w%@AE@%  │%@NL@%
  4681. └───────────┘ └───────────┘%@NL@%
  4682. ───────────────────┬─────────────────────────┬─────────────────────────────%@NL@%
  4683. %@AB@%REP  INS %@AI@%dest%@AE@%,%@AB@%DX%@AE@%   │ rep   insb              │ 88/86  ─%@NL@%
  4684. %@AB@%REP  INSB%@AE@%          │ rep   ins destin,dx     │   286  5+4n%@NL@%
  4685. %@AB@%REP  INSW%@AE@%          │                         │   386  13+6n,pm=(7,27)+6n%@FN@%
  4686. %@FC@%1. First protected-mode timing: CPL ≤ IOPL. Second timing: CPL > IOPL.%@EF@%1%@NL@%
  4687. ───────────────────┴─────────────────────────┴─────────────────────────────%@NL@%
  4688. ┌───────────┐ ┌───────────┐%@NL@%
  4689. │ 11110010  │ │ 0110111%@AI@%w%@AE@%  │%@NL@%
  4690. └───────────┘ └───────────┘%@NL@%
  4691. ────────────────────┬─────────────────────────┬────────────────────────────%@NL@%
  4692. %@AB@%REP  OUTS DX%@AE@%,%@AI@%src%@AE@%    │ rep   outs dx,source    │ 88/86  ─%@NL@%
  4693. %@AB@%REP  OUTSB%@AE@%          │ rep   outsw             │   286  5+4n%@NL@%
  4694. %@AB@%REP  OUTSW%@AE@%          │                         │   386  12+5n,pm=(6,26)+5n%@FN@%
  4695. %@FC@%1. First protected-mode timing: CPL ≤ IOPL. Second timing: CPL > IOPL.%@EF@%1%@NL@%
  4696. ────────────────────┴─────────────────────────┴────────────────────────────%@NL@%
  4697. %@NL@%
  4698. %@NL@%
  4699. %@CR:93        @%%@NL@%
  4700. %@3@%%@AB@%REP%@AI@%condition%@AE@%%@CR:REPconditi@%%@EH@%%@QR:rep@%%@NL@%
  4701. %@AB@%Repeat String Conditionally%@AE@%%@QR:repeat string@%%@QR:repeat string conditionally@%%@NL@%
  4702. ┌───┬───┬───┬───┬───┬───┬───┬───┬───┐%@NL@%
  4703. │ O │ D │ I │ T │ S │ Z │ A │ P │ C │%@NL@%
  4704. ├───┼───┼───┼───┼───┼───┼───┼───┼───┤%@NL@%
  4705. │   │   │   │   │   │ ± │   │   │   │%@NL@%
  4706. └───┴───┴───┴───┴───┴───┴───┴───┴───┘%@NL@%
  4707. %@NL@%
  4708. %@4@%Repeats a string instruction as long as condition is true%@EH@%
  4709. and the maximum count has not been reached. %@AB@%REPE%@AE@% and %@AB@%REPZ%@AE@%
  4710. (the names are synonyms) repeat while the zero flag is set.
  4711. %@AB@%REPNE%@AE@% and %@AB@%REPNZ%@AE@% (the names are synonyms) repeat while the
  4712. zero flag is cleared. The conditional repeat prefixes
  4713. should only be used with %@AB@%SCAS%@AE@% and %@AB@%CMPS%@AE@%, since these are
  4714. the only string instructions that modify the zero flag.
  4715. Before executing the instruction, %@AB@%CX%@AE@% should be set to the
  4716. maximum allowable number of repetitions. For each string
  4717. element, the string instruction is performed, %@AB@%CX%@AE@% is
  4718. decremented, and the zero flag is tested. On all 
  4719. processors except the 80386, combining a repeat prefix
  4720. with a segment override may cause errors if an interrupt
  4721. occurs during a string operation.%@NL@%
  4722. %@NL@%
  4723. ───────────────────────────────────────────────────────────────────────────%@NL@%
  4724. ┌───────────┐ ┌───────────┐%@NL@%
  4725. │ 11110011  │ │ 1010011%@AI@%w%@AE@%  │%@NL@%
  4726. └───────────┘ └───────────┘%@NL@%
  4727. ──────────────────────┬────────────────────────┬───────────────────────────%@NL@%
  4728. %@AB@%REPE  CMPS %@AI@%dest,src%@AE@%   │ repz cmpsb             │ 88/86   9+22n (W88=9+30n)%@NL@%
  4729. %@AB@%REPE  CMPSB%@AE@%           │ repe  cmps destin,src  │   286   5+9n%@NL@%
  4730. %@AB@%REPE  CMPSW%@AE@%           │                        │   386   5+9n%@NL@%
  4731. ──────────────────────┴────────────────────────┴───────────────────────────%@NL@%
  4732. ┌───────────┐ ┌───────────┐%@NL@%
  4733. │ 11110011  │ │ 1010111%@AI@%w%@AE@%  │%@NL@%
  4734. └───────────┘ └───────────┘%@NL@%
  4735. ──────────────────────┬─────────────────────────┬──────────────────────────%@NL@%
  4736. %@AB@%REPE  SCAS %@AI@%dest%@AE@%       │ repe  scas destin       │ 88/86   9+15n (W88=9+19n)%@NL@%
  4737. %@AB@%REPE  SCASB%@AE@%           │ repz  scasw             │   286   5+8n%@NL@%
  4738. %@AB@%REPE  SCASW%@AE@%           │                         │   386   5+8n%@NL@%
  4739. ──────────────────────┴─────────────────────────┴──────────────────────────%@NL@%
  4740. ┌───────────┐ ┌───────────┐%@NL@%
  4741. │ 11110010  │ │ 1010011%@AI@%w%@AE@%  │%@NL@%
  4742. └───────────┘ └───────────┘%@NL@%
  4743. ──────────────────────┬─────────────────────────┬──────────────────────────%@NL@%
  4744. %@AB@%REPNE  CMPS %@AI@%dest,src%@AE@%  │ repne  cmpsw            │ 88/86   9+22n (W88=9+30n)%@NL@%
  4745. %@AB@%REPNE  CMPSB%@AE@%          │ repnz cmps destin,src   │   286   5+9n%@NL@%
  4746. %@AB@%REPNE  CMPSW%@AE@%          │                         │   386   5+9n%@NL@%
  4747. ──────────────────────┴─────────────────────────┴──────────────────────────%@NL@%
  4748. ┌───────────┐ ┌───────────┐%@NL@%
  4749. │ 11110010  │ │ 1010111w  │%@NL@%
  4750. └───────────┘ └───────────┘%@NL@%
  4751. ──────────────────────┬─────────────────────────┬──────────────────────────%@NL@%
  4752. %@AB@%REPNE  SCAS %@AI@%dest%@AE@%      │ repne scas destin       │ 88/86   9+15n (W88=9+19n)%@NL@%
  4753. %@AB@%REPNE  SCASB%@AE@%          │ repnz scasb             │   286   5+8n%@NL@%
  4754. %@AB@%REPNE  SCASW%@AE@%          │                         │   386   5+8n%@NL@%
  4755. ──────────────────────┴─────────────────────────┴──────────────────────────%@NL@%
  4756. %@NL@%
  4757. %@NL@%
  4758. %@CR:94        @%%@NL@%
  4759. %@3@%%@AB@%RET/RETN/RETF%@AE@%%@CR:RET       @%%@EH@%%@QR:ret@%%@QR:retn@%%@QR:retf@%%@NL@%
  4760. %@AB@%Return from Procedure%@AE@%%@QR:return from procedure@%%@QR:return@%%@QR:procedure return@%%@NL@%
  4761. ┌───┬───┬───┬───┬───┬───┬───┬───┬───┐%@NL@%
  4762. │ O │ D │ I │ T │ S │ Z │ A │ P │ C │%@NL@%
  4763. ├───┼───┼───┼───┼───┼───┼───┼───┼───┤%@NL@%
  4764. │   │   │   │   │   │   │   │   │   │%@NL@%
  4765. └───┴───┴───┴───┴───┴───┴───┴───┴───┘%@NL@%
  4766. %@NL@%
  4767. %@4@%Returns from a procedure by transferring control to an%@EH@%
  4768. address popped from the top of the stack. A constant operand
  4769. can be given indicating the number of additional bytes to
  4770. release. The constant is normally used to adjust the stack
  4771. for arguments pushed before the procedure was called. Under
  4772. %@AB@%MASM%@AE@%, the size of a return (near or far) is the size of the
  4773. procedure in which the %@AB@%RET%@AE@% is defined with the %@AB@%PROC%@AE@% directive.
  4774. Starting with Version 5.0, %@AB@%RETN%@AE@% can be used to specify a
  4775. near return; %@AB@%RETF%@AE@% can specify a far return. A near return
  4776. works by popping a word into %@AB@%IP%@AE@%. A far return works by
  4777. popping a word into %@AB@%IP%@AE@% and then popping a word into %@AB@%CS%@AE@%.
  4778. After the return, the number of bytes given in the operand
  4779. (if any) is added to %@AB@%SP%@AE@%.%@NL@%
  4780. %@NL@%
  4781. ───────────────────────────────────────────────────────────────────────────%@NL@%
  4782. ┌───────────┐%@NL@%
  4783. │ 11000011  │%@NL@%
  4784. └───────────┘%@NL@%
  4785. ─────────────────┬─────────────────────────┬───────────────────────────────%@NL@%
  4786. %@AB@%RET%@AE@%              │ ret                     │ 88/86     16 (88=20)%@NL@%
  4787. %@AB@%RETN%@AE@%             │ retn                    │   286     11+m%@NL@%
  4788.                  │                         │   386     10+m%@NL@%
  4789. ─────────────────┴─────────────────────────┴───────────────────────────────%@NL@%
  4790. ┌───────────┐%@NL@%
  4791. │ 11000010  │  data (2)%@NL@%
  4792. └───────────┘%@NL@%
  4793. ─────────────────┬─────────────────────────┬───────────────────────────────%@NL@%
  4794. %@AB@%RET  %@AI@%immed8%@AE@%      │ ret   2                 │ 88/86     20 (88=24)%@NL@%
  4795. %@AB@%RETN  %@AI@%immed8%@AE@%     │ retn  8                 │   286     11+m%@NL@%
  4796.                  │                         │   386     10+m%@NL@%
  4797. ─────────────────┴─────────────────────────┴───────────────────────────────%@NL@%
  4798. ┌───────────┐%@NL@%
  4799. │ 11001011  │%@NL@%
  4800. └───────────┘%@NL@%
  4801. ─────────────────┬─────────────────────────┬───────────────────────────────%@NL@%
  4802. %@AB@%RET%@AE@%              │ ret                     │ 88/86     26 (88=34)%@NL@%
  4803. %@AB@%RETF%@AE@%             │ retf                    │   286     15+m,pm=25+m,55%@FN@%
  4804. %@FC@%1. The first protected mode timing is for a return to
  4805. %@FC@%the same privilege level; the second is for a return to a
  4806. %@FC@%lesser privilege level.%@EF@%1%@NL@%
  4807.                  │                         │   386     18+m,pm=32+m,62%@FN@%
  4808. %@FC@%1. The first protected mode timing is for a return to
  4809. %@FC@%the same privilege level; the second is for a return to a
  4810. %@FC@%lesser privilege level.%@EF@%1%@NL@%
  4811. ─────────────────┴─────────────────────────┴───────────────────────────────%@NL@%
  4812. ┌───────────┐%@NL@%
  4813. │ 11001010  │  data (2)%@NL@%
  4814. └───────────┘%@NL@%
  4815. ─────────────────┬─────────────────────────┬───────────────────────────────%@NL@%
  4816. %@AB@%RET  %@AI@%immed16%@AE@%     │ ret   8                 │ 88/86     25 (88=33)%@NL@%
  4817. %@AB@%RETF  %@AI@%immed16%@AE@%    │ retf  32                │   286     15+m,pm=25+m,55%@FN@%
  4818. %@FC@%1. The first protected mode timing is for a return to
  4819. %@FC@%the same privilege level; the second is for a return to a
  4820. %@FC@%lesser privilege level.%@EF@%1%@NL@%
  4821.                  │                         │   386     18+m,pm=32+m,68%@FN@%
  4822. %@FC@%1. The first protected mode timing is for a return to
  4823. %@FC@%the same privilege level; the second is for a return to a
  4824. %@FC@%lesser privilege level.%@EF@%1%@NL@%
  4825. ─────────────────┴─────────────────────────┴───────────────────────────────%@NL@%
  4826. %@NL@%
  4827. %@NL@%
  4828. %@CR:95        @%%@NL@%
  4829. %@3@%%@AB@%ROL/ROR%@AE@%%@CR:ROL       @%%@EH@%%@QR:rol@%%@QR:ror@%%@NL@%
  4830. %@AB@%Rotate%@AE@%%@QR:rotate@%%@NL@%
  4831. %@NL@%
  4832. %@4@%See %@AB@%RCL/RCR%@AE@%%@BO:     457a0@%%@EH@%%@NL@%
  4833. %@NL@%
  4834. %@NL@%
  4835. %@NL@%
  4836. %@3@%%@AB@%SAHF%@AE@%%@CR:SAHF      @%%@EH@%%@QR:sahf@%%@NL@%
  4837. %@AB@%Store AH into Flags%@AE@%%@QR:store ah into flags@%%@QR:store ah@%%@NL@%
  4838. ┌───┬───┬───┬───┬───┬───┬───┬───┬───┐%@NL@%
  4839. │ O │ D │ I │ T │ S │ Z │ A │ P │ C │%@NL@%
  4840. ├───┼───┼───┼───┼───┼───┼───┼───┼───┤%@NL@%
  4841. │   │   │   │   │ ± │ ± │ ± │ ± │ ± │%@NL@%
  4842. └───┴───┴───┴───┴───┴───┴───┴───┴───┘%@NL@%
  4843. %@NL@%
  4844. %@4@%Transfers %@AB@%AH%@AE@% into bits 0 to 7 of the flags register. This%@EH@%
  4845. includes the carry, parity, auxiliary carry, zero, and sign flags,
  4846. but not the trap, interrupt, direction, or overflow flags.%@NL@%
  4847. %@NL@%
  4848. ───────────────────────────────────────────────────────────────────────────%@NL@%
  4849. ┌─────────────┐%@NL@%
  4850. │   10011110  │%@NL@%
  4851. └─────────────┘%@NL@%
  4852. ────────────────┬─────────────────────────┬────────────────────────────────%@NL@%
  4853.                 │ sahf                    │ 88/86   4%@NL@%
  4854. %@AB@%SAHF%@AE@%            │                         │   286   2%@NL@%
  4855.                 │                         │   386   3%@NL@%
  4856. ────────────────┴─────────────────────────┴────────────────────────────────%@NL@%
  4857. %@NL@%
  4858. %@NL@%
  4859. %@CR:96        @%%@NL@%
  4860. %@3@%%@AB@%SAL/SAR/SHL/SHR%@AE@%%@CR:SAL       @%%@EH@%%@QR:sal@%%@QR:sar@%%@QR:shl@%%@QR:shr@%%@NL@%
  4861. %@AB@%Shift%@AE@%%@QR:shift@%%@NL@%
  4862. ┌───┬───┬───┬───┬───┬───┬───┬───┬───┐%@NL@%
  4863. │ O │ D │ I │ T │ S │ Z │ A │ P │ C │%@NL@%
  4864. ├───┼───┼───┼───┼───┼───┼───┼───┼───┤%@NL@%
  4865. │ ± │   │   │   │ ± │ ± │ ? │ ± │ ± │%@NL@%
  4866. └───┴───┴───┴───┴───┴───┴───┴───┴───┘%@NL@%
  4867. %@NL@%
  4868. %@4@%Shifts the bits in the destination operand the number of%@EH@%
  4869. times specified by the source operand. %@AB@%SAL%@AE@% and %@AB@%SHL%@AE@% shift the
  4870. bits left; %@AB@%SAR%@AE@% and %@AB@%SHR%@AE@% shift right.%@NL@%
  4871. %@NL@%
  4872. %@4@%With %@AB@%SHL%@AE@%, %@AB@%SAL%@AE@%, and %@AB@%SHR%@AE@%, the bit shifted off the end of the%@EH@%
  4873. operand is copied into the carry flag and the leftmost or
  4874. rightmost bit opened by the shift is set to 0. With %@AB@%SAR%@AE@%, the
  4875. bit shifted off the end of the operand is copied into the
  4876. carry flag and the leftmost bit opened by the shift retains
  4877. its previous value (thus preserving the sign of the
  4878. operand). %@AB@%SAL%@AE@% and %@AB@%SHL%@AE@% are synonyms; they have the
  4879. same effect.%@NL@%
  4880. %@NL@%
  4881. %@4@%On the 8088 and 8086, the source operand can be either %@AB@%CL%@AE@% or%@EH@%
  4882. 1. On the 80186-80386 processors, the source operand can be
  4883. %@AB@%CL%@AE@% or an 8-bit constant. On the 80186-80386 processors,
  4884. shift counts larger than 31 are masked off, but on the 8088
  4885. and 8086, larger shift counts are performed despite the
  4886. inefficiency involved. The overflow flag is only modified by
  4887. single-bit variations of the instruction; for multiple-bit
  4888. variations it is undefined.%@NL@%
  4889. %@NL@%
  4890. ───────────────────────────────────────────────────────────────────────────%@NL@%
  4891. ┌─────────────┐        ┌─────────────┐%@NL@%
  4892. │   1101000%@AI@%w%@AE@%  │        │%@AI@%mod%@AE@%,%@AI@%TTT%@AE@%%@FN@%
  4893. %@FC@%1. %@AI@%TTT%@AE@% represents one of the following bit codes: 100 for
  4894. %@FC@%%@AB@%SHL%@AE@% or %@AB@%SAL%@AE@%, 101 for %@AB@%SHR%@AE@%,  or 111 for %@AB@%SAR%@AE@%.%@EF@%1,%@AI@%r/m%@AE@%│     %@AI@%disp%@AE@% %@AI@%(0%@AE@% %@AI@%or%@AE@% %@AI@%2)%@AE@%%@NL@%
  4895. └─────────────┘        └─────────────┘%@NL@%
  4896. ──────────────────┬───────────────────────────┬────────────────────────────%@NL@%
  4897.                   │ sar    di,1               │ 88/86   2%@NL@%
  4898. %@AB@%SAR  %@AI@%reg%@AE@%,%@AB@%1%@AE@%        │ sar    cl,1               │   286   2%@NL@%
  4899.                   │                           │   386   3%@NL@%
  4900. ──────────────────┼───────────────────────────┼────────────────────────────%@NL@%
  4901. %@AB@%SAL  %@AI@%reg%@AE@%,%@AB@%1%@AE@%        │ shr    dh,1               │ 88/86   2%@NL@%
  4902. %@AB@%SHL  %@AI@%reg%@AE@%,%@AB@%1%@AE@%        │ shl    si,1               │   286   2%@NL@%
  4903. %@AB@%SHR  %@AI@%reg%@AE@%,%@AB@%1%@AE@%        │ sal    bx,1               │   386   3%@NL@%
  4904. ──────────────────┼───────────────────────────┼────────────────────────────%@NL@%
  4905.                   │ sar    count,1            │ 88/86   15+EA (W88=23+EA)%@NL@%
  4906. %@AB@%SAR  %@AI@%mem%@AE@%,%@AB@%1%@AE@%        │                           │   286   7%@NL@%
  4907.                   │                           │   386   7%@NL@%
  4908. ──────────────────┼───────────────────────────┼────────────────────────────%@NL@%
  4909. %@AB@%SAL  %@AI@%mem%@AE@%,%@AB@%1%@AE@%        │ sal    WORD PTR m32[0],1  │ 80/86   15+EA (W88=23+EA)%@NL@%
  4910. %@AB@%SHL  %@AI@%mem%@AE@%,%@AB@%1%@AE@%        │ shl    index,1            │   286   7%@NL@%
  4911. %@AB@%SHR  %@AI@%mem%@AE@%,%@AB@%1%@AE@%        │ shr    unsign[di],1       │   386   7%@NL@%
  4912. %@CR:97        @%──────────────────┴───────────────────────────┴────────────────────────────%@NL@%
  4913. ┌───────────┐  ┌─────────────┐%@NL@%
  4914. │ 1101001%@AI@%w%@AE@%  │  │%@AI@%mod%@AE@%,%@AI@%TTT%@AE@%%@FN@%
  4915. %@FC@%1. %@AI@%TTT%@AE@% represents one of the following bit codes: 100 for %@AB@%SHL%@AE@% or
  4916. %@FC@%%@AB@%SAL%@AE@%, 101 for 
  4917. %@FC@%%@AB@%SHR%@AE@%,  or 111 for %@AB@%SAR%@AE@%.%@EF@%1,r/%@AI@%m%@AE@%│     %@AI@%disp%@AE@% %@AI@%(0%@AE@% %@AI@%or%@AE@% %@AI@%2)%@AE@%%@NL@%
  4918. └───────────┘  └─────────────┘%@NL@%
  4919. ────────────────┬───────────────────────────┬────────────────────────────%@NL@%
  4920.                 │ sar    bx,cl              │ 88/86 8+4n%@NL@%
  4921. %@AB@%SAR  %@AI@%reg%@AE@%,%@AB@%CL%@AE@%     │ sar    dx,cl              │   286 5+n%@NL@%
  4922.                 │                           │   386 3%@NL@%
  4923. ────────────────┼───────────────────────────┼────────────────────────────%@NL@%
  4924. %@AB@%SAL  %@AI@%reg%@AE@%,%@AB@%CL%@AE@%     │ shr    dx,cl              │ 88/86 8+4n%@NL@%
  4925. %@AB@%SHL  %@AI@%reg%@AE@%,%@AB@%CL%@AE@%     │ shl    di,cl              │   286 5+n%@NL@%
  4926. %@AB@%SHR  %@AI@%reg%@AE@%,%@AB@%CL%@AE@%     │ sal    ah,cl              │   386 3%@NL@%
  4927. ────────────────┼───────────────────────────┼────────────────────────────%@NL@%
  4928.                 │ sar    sign,cl            │ 88/86 20+EA+4n (W88=28+EA+4n)%@NL@%
  4929. %@AB@%SAR  %@AI@%mem%@AE@%,%@AB@%CL%@AE@%     │ sar    WORD PTR [bp+8],cl │   286 8+n%@NL@%
  4930.                 │                           │   386 7%@NL@%
  4931. ────────────────┼───────────────────────────┼────────────────────────────%@NL@%
  4932. %@AB@%SAL  %@AI@%mem%@AE@%,%@AB@%CL%@AE@%     │ shr    WORD PTR m32[2],cl │ 88/86 20+EA+4n (W88=28+EA+4n)%@NL@%
  4933. %@AB@%SHL  %@AI@%mem%@AE@%,%@AB@%CL%@AE@%     │ sal    BYTE PTR [di],cl   │   286 8+n%@NL@%
  4934. %@AB@%SHR  %@AI@%mem%@AE@%,%@AB@%CL%@AE@%     │ shl    index,cl           │   386 7%@NL@%
  4935. ────────────────┴───────────────────────────┴────────────────────────────%@NL@%
  4936. ┌───────────┐  ┌─────────────┐%@NL@%
  4937. │ 1100000%@AI@%w%@AE@%  │  │%@AI@%mod%@AE@%,%@AI@%TTT%@AE@%%@FN@%
  4938. %@FC@%1. %@AI@%TTT%@AE@% represents one of the following bit codes: 100 for %@AB@%SHL%@AE@% or
  4939. %@FC@%%@AB@%SAL%@AE@%, 101 for 
  4940. %@FC@%%@AB@%SHR%@AE@%,  or 111 for %@AB@%SAR%@AE@%.%@EF@%1,r%@AI@%/m%@AE@%│     %@AI@%disp%@AE@% %@AI@%(0%@AE@% %@AI@%or%@AE@% %@AI@%2)%@AE@%     %@AI@%data%@AE@% %@AI@%(1)%@AE@%%@NL@%
  4941. └───────────┘  └─────────────┘%@NL@%
  4942. ────────────────┬───────────────────────────┬────────────────────────────%@NL@%
  4943.                 │ sar    bx,5               │ 88/86 ─%@NL@%
  4944. %@AB@%SAR  %@AI@%reg%@AE@%,%@AI@%immed8%@AE@% │ sar    cl,5               │   286 5+n%@NL@%
  4945.                 │                           │   386 3%@NL@%
  4946. ────────────────┼───────────────────────────┼────────────────────────────%@NL@%
  4947. %@AB@%SAL  %@AI@%reg%@AE@%,%@AI@%immed8%@AE@% │ sal    cx,6               │ 88/86 ─%@NL@%
  4948. %@AB@%SHL  %@AI@%reg%@AE@%,%@AI@%immed8%@AE@% │ shl    di,2               │   286 5+n%@NL@%
  4949. %@AB@%SHR  %@AI@%reg%@AE@%,%@AI@%immed8%@AE@% │ shr    bx,8               │   386 3%@NL@%
  4950. ────────────────┼───────────────────────────┼────────────────────────────%@NL@%
  4951.                 │ sar    sign_count,3       │ 88/86 ─%@NL@%
  4952. %@AB@%SAR  %@AI@%mem%@AE@%,%@AI@%immed8%@AE@% │ sar    WORD PTR [bx],5    │   286 8+n%@NL@%
  4953.                 │                           │   386 7%@NL@%
  4954. ────────────────┼───────────────────────────┼────────────────────────────%@NL@%
  4955. %@AB@%SAL  %@AI@%mem%@AE@%,%@AI@%immed8%@AE@% │ shr    mem16,11           │ 88/86 ─%@NL@%
  4956. %@AB@%SHL  %@AI@%mem%@AE@%,%@AI@%immed8%@AE@% │ shl    unsign,4           │   286 8+n%@NL@%
  4957. %@AB@%SHR  %@AI@%mem%@AE@%,%@AI@%immed8%@AE@% │ sal    array[bx+di],14    │   386 7%@NL@%
  4958. ────────────────┴───────────────────────────┴────────────────────────────%@NL@%
  4959. %@NL@%
  4960. %@NL@%
  4961. %@CR:98        @%%@NL@%
  4962. %@3@%%@AB@%SBB%@AE@%%@CR:SBB       @%%@EH@%%@QR:sbb@%%@NL@%
  4963. %@AB@%Subtract with Borrow%@AE@%%@QR:subtract with borrow@%%@NL@%
  4964. ┌───┬───┬───┬───┬───┬───┬───┬───┬───┐%@NL@%
  4965. │ O │ D │ I │ T │ S │ Z │ A │ P │ C │%@NL@%
  4966. ├───┼───┼───┼───┼───┼───┼───┼───┼───┤%@NL@%
  4967. │ ± │   │   │   │ ± │ ± │ ± │ ± │ ± │%@NL@%
  4968. └───┴───┴───┴───┴───┴───┴───┴───┴───┘%@NL@%
  4969. %@NL@%
  4970. %@4@%Subtracts the source from the destination, then subtracts%@EH@%
  4971. the the value of the carry flag from the result. This result
  4972. is assigned to the destination. %@AB@%SBB%@AE@% is used to subtract the
  4973. least significant portions of numbers that must be processed
  4974. in multiple registers.%@NL@%
  4975. %@NL@%
  4976. ───────────────────────────────────────────────────────────────────────────%@NL@%
  4977. ┌───────────┐  ┌─────────────┐%@NL@%
  4978. │ 000110%@AI@%dw%@AE@%  │  │ %@AI@%mod%@AE@%,%@AI@%reg%@AE@%,%@AI@%r/m%@AE@% │     %@AI@%disp%@AE@% %@AI@%(0%@AE@% %@AI@%or%@AE@% %@AI@%2)%@AE@%%@NL@%
  4979. └───────────┘  └─────────────┘%@NL@%
  4980. ───────────────────┬───────────────────────────┬───────────────────────────%@NL@%
  4981.                    │ sbb    dx,cx              │ 88/86   3%@NL@%
  4982. %@AB@%SBB  %@AI@%reg%@AE@%,%@AI@%reg%@AE@%       │                           │   286   2%@NL@%
  4983.                    │                           │   386   2%@NL@%
  4984. ───────────────────┼───────────────────────────┼───────────────────────────%@NL@%
  4985.                    │ sbb    WORD PTR m32[2],dx │ 88/86   16+EA (W88=24+EA)%@NL@%
  4986. %@AB@%SBB  %@AI@%mem%@AE@%,%@AI@%reg%@AE@%       │                           │   286   7%@NL@%
  4987.                    │                           │   386   6%@NL@%
  4988. ───────────────────┼───────────────────────────┼───────────────────────────%@NL@%
  4989.                    │ sbb    dx,WORD PTR m32[2] │ 88/86   9+EA (W88=13+EA)%@NL@%
  4990. %@AB@%SBB  %@AI@%reg%@AE@%,%@AI@%mem%@AE@%       │                           │   286   7%@NL@%
  4991.                    │                           │   386   7%@NL@%
  4992. ───────────────────┴───────────────────────────┴───────────────────────────%@NL@%
  4993. ┌───────────┐  ┌─────────────┐%@NL@%
  4994. │ 100000%@AI@%sw%@AE@%  │  │ %@AI@%mod%@AE@%,011,%@AI@%r/m%@AE@% │     %@AI@%disp%@AE@% %@AI@%(0%@AE@% %@AI@%or%@AE@% %@AI@%2)%@AE@%     %@AI@%data%@AE@% %@AI@%(1%@AE@% %@AI@%or%@AE@% %@AI@%2)%@AE@%%@NL@%
  4995. └───────────┘  └─────────────┘%@NL@%
  4996. ───────────────────┬───────────────────────────┬───────────────────────────%@NL@%
  4997.                    │ sbb    dx,45              │ 88/86   4%@NL@%
  4998. %@AB@%SBB  %@AI@%reg%@AE@%,%@AI@%immed%@AE@%     │                           │   286   3%@NL@%
  4999.                    │                           │   386   2%@NL@%
  5000. ───────────────────┼───────────────────────────┼───────────────────────────%@NL@%
  5001.                    │ sbb    WORD PTR m32[2],40 │ 88/86   17+EA (W88=25+EA)%@NL@%
  5002. %@AB@%SBB  %@AI@%mem%@AE@%,%@AI@%immed%@AE@%     │                           │   286   7%@NL@%
  5003.                    │                           │   386   7%@NL@%
  5004. ───────────────────┴───────────────────────────┴───────────────────────────%@NL@%
  5005. ┌───────────┐%@NL@%
  5006. │ 0001110%@AI@%w%@AE@%  │     %@AI@%data%@AE@% %@AI@%(1%@AE@% %@AI@%or%@AE@% %@AI@%2)%@AE@%%@NL@%
  5007. └───────────┘%@NL@%
  5008. ───────────────────┬───────────────────────────┬───────────────────────────%@NL@%
  5009.                    │ sb     ax,320             │ 88/86   4%@NL@%
  5010. %@AB@%SBB  %@AI@%accum%@AE@%,%@AI@%immed%@AE@%   │                           │   286   3%@NL@%
  5011.                    │                           │   386   2%@NL@%
  5012. ───────────────────┴───────────────────────────┴───────────────────────────%@NL@%
  5013. %@NL@%
  5014. %@NL@%
  5015. %@CR:99        @%%@NL@%
  5016. %@3@%%@AB@%SCAS/SCASB/SCASW/SCASD%@AE@%%@CR:SCAS      @%%@EH@%%@QR:scas@%%@QR:scasb@%%@QR:scasw@%%@QR:scasd@%%@NL@%
  5017. %@AB@%Scan String Flags%@AE@%%@QR:scan string flags@%%@QR:scan string@%%@QR:scan flags@%%@NL@%
  5018. ┌───┬───┬───┬───┬───┬───┬───┬───┬───┐%@NL@%
  5019. │ O │ D │ I │ T │ S │ Z │ A │ P │ C │%@NL@%
  5020. ├───┼───┼───┼───┼───┼───┼───┼───┼───┤%@NL@%
  5021. │ ± │   │   │   │ ± │ ± │ ± │ ± │ ± │%@NL@%
  5022. └───┴───┴───┴───┴───┴───┴───┴───┴───┘%@NL@%
  5023. %@NL@%
  5024. %@4@%Scans a string to find a value specified in the accumulator%@EH@%
  5025. register. The string to be scanned is considered the
  5026. destination and must be pointed to by %@AB@%ES%@AE@%:%@AB@%DI%@AE@% (even if an
  5027. operand is specified). For each element, the destination
  5028. element is subtracted from the accumulator value and the
  5029. flags are updated to reflect the result (although the result
  5030. is not stored). %@AB@%DI%@AE@% is adjusted according to the size of the
  5031. operands and the status of the direction flag. %@AB@%DI %@AE@%is
  5032. increased if the direction flag has been cleared with %@AB@%CLD%@AE@% 
  5033. or decreased if the direction flag has been set with %@AB@%STD%@AE@%.%@NL@%
  5034. %@NL@%
  5035. %@4@%If the %@AB@%SCAS%@AE@% form of the instruction is used, an operand must%@EH@%
  5036. be provided to indicate the size of the data elements to be
  5037. processed. No segment override is allowed. If %@AB@%SCASB%@AE@% (bytes),
  5038. %@AB@%SCASW%@AE@% (words), or %@AB@%SCASD%@AE@% (doublewords on the 80386 only) is
  5039. used, the instruction determines the size of the data
  5040. elements to be processed and whether the element scanned
  5041. for is in %@AB@%AL%@AE@%, %@AB@%AX%@AE@%, or %@AB@%EAX%@AE@%. No operand is allowed.%@NL@%
  5042. %@NL@%
  5043. %@4@%%@AB@%SCAS%@AE@% and its variations are usually used with repeat%@EH@%
  5044. prefixes. %@AB@%REPNE%@AE@% (or %@AB@%REPNZ%@AE@%) is used to find the first match
  5045. of the accumulator value. %@AB@%REPE%@AE@% (or %@AB@%REPZ%@AE@%) is used to find the
  5046. first nonmatch. Before the comparison, %@AB@%CX%@AE@% should contain the
  5047. maximum number of elements to compare. After the comparison,
  5048. %@AB@%CX%@AE@% will be 0 if no match or nonmatch was found. Otherwise %@AB@%SI%@AE@%
  5049. and %@AB@%DI%@AE@% will point to the element after the first match or
  5050. nonmatch.%@NL@%
  5051. %@NL@%
  5052. ───────────────────────────────────────────────────────────────────────────%@NL@%
  5053. ┌───────────┐%@NL@%
  5054. │ 1010111%@AI@%w%@AE@%  │%@NL@%
  5055. └───────────┘%@NL@%
  5056. ──────────────────┬─────────────────────────┬──────────────────────────────%@NL@%
  5057. %@AB@%SCAS%@AE@%  «%@AB@%ES:%@AE@%»%@AI@%dest%@AE@%   │ repne  scasw            │ 88/86   15 (W88=19)%@NL@%
  5058. %@AB@%SCASB%@AE@%             │ repe   scasb            │   286   7%@NL@%
  5059. %@AB@%SCASW%@AE@%             │ scas   es:destin        │   386   7%@NL@%
  5060. ──────────────────┴─────────────────────────┴──────────────────────────────%@NL@%
  5061. %@NL@%
  5062. %@NL@%
  5063. %@CR:100       @%%@NL@%
  5064. %@3@%%@AB@%SET%@AI@%condition%@AE@%%@CR:SETconditi@%%@EH@%%@QR:set@%%@NL@%
  5065. %@AB@%Set Conditionally%@AE@%%@NL@%
  5066. %@AB@%80386 Only%@AE@%%@NL@%
  5067. ┌───┬───┬───┬───┬───┬───┬───┬───┬───┐%@NL@%
  5068. │ O │ D │ I │ T │ S │ Z │ A │ P │ C │%@NL@%
  5069. ├───┼───┼───┼───┼───┼───┼───┼───┼───┤%@NL@%
  5070. │   │   │   │   │   │   │   │   │   │%@NL@%
  5071. └───┴───┴───┴───┴───┴───┴───┴───┴───┘%@NL@%
  5072. %@NL@%
  5073. %@4@%Sets the byte specified in the operand to 1 if %@AI@%condition%@AE@% is%@EH@%
  5074. true or to 0 if %@AI@%condition%@AE@% is false. The condition is tested
  5075. by checking the flags shown in the table on the following
  5076. page. The instruction is used to conditionally set Boolean
  5077. flags.%@NL@%
  5078. %@NL@%
  5079. ───────────────────────────────────────────────────────────────────────────%@NL@%
  5080. ┌───────────┐ ┌───────────┐ ┌─────────────┐%@NL@%
  5081. │ 00001111  │ │ 1001%@AI@%cond%@AE@%  │ │ %@AI@%mod%@AE@%,000,%@AI@%r/m%@AE@% │%@NL@%
  5082. └───────────┘ └───────────┘ └─────────────┘%@NL@%
  5083. ───────────────────┬─────────────────────────┬─────────────────────────────%@NL@%
  5084.                    │ setc   dh               │ 88/86   ─%@NL@%
  5085. %@AB@%SET%@AI@%condition%@AE@% %@AI@%reg8%@AE@%  │ setz   al               │   286   ─%@NL@%
  5086.                    │ setae  bl               │   386   4%@NL@%
  5087. ───────────────────┼─────────────────────────┼─────────────────────────────%@NL@%
  5088.                    │ seto   BTYE PTR [bx]    │ 88/86   ─%@NL@%
  5089. %@AB@%SET%@AI@%condition%@AE@% %@AI@%mem8%@AE@%  │ setle flag              │   286   ─%@NL@%
  5090.                    │ sete   Booleans[di]     │   386   5%@NL@%
  5091. ───────────────────┴─────────────────────────┴─────────────────────────────%@NL@%
  5092. %@NL@%
  5093. %@CR:101       @%%@NL@%
  5094. %@AB@%SET CONDITIONS%@AE@%%@QR:set@%%@QR:set conditions@%%@NL@%
  5095. %@NL@%
  5096. %@TH: 057 02646 01 15 14 16 31 @%%@AB@%Opcode         Mnemonic      Flags Checked   Description%@AE@%───────────────────────────────────────────────────────────────────────────┌───────────┐│ 10010010  │  %@AB@%SETB/SETNAE%@AE@%   CF=1            Set if below/not above or└───────────┘                                equal (unsigned comparisons)┌───────────┐│ 10010011  │  %@AB@%SETAE/SETNB%@AE@%   CF=0            Set if above or equal/not └───────────┘                                below (unsigned comparisons)┌───────────┐│ 10010110  │  %@AB@%SETBE/SETNA%@AE@%   CF=1 or ZF=1    Set if below or equal/not └───────────┘                                above (unsigned comparisons)┌───────────┐│ 10010111  │  %@AB@%SETA/SETNBE%@AE@%   CF=0 and ZF=0   Set if above/not below or └───────────┘                                equal (unsigned comparisons)┌───────────┐│ 10010100  │  %@AB@%SETE/SETZ%@AE@%     ZF=1            Set if equal/zero└───────────┘┌───────────┐│ 10010101  │  %@AB@%SETNE/SETNZ%@AE@%   ZF=0            Set if not equal/not zero└───────────┘┌───────────┐│ 10011100  │  %@AB@%SETL/SETNGE%@AE@%   SF¡OF           Set if less/not greater or └───────────┘                                equal (signed comparisons)┌───────────┐│ 10011101  │  %@AB@%SETGE/SETNL%@AE@%   SF=OF           Set if greater or equal/not └───────────┘                                less (signed comparisons)┌───────────┐│ 10011110  │  %@AB@%SETLE/SETNG%@AE@%   ZF=1 or SF╪OF   Set if less or equal/not └───────────┘                                greater or equal (signed                                             comparisons)┌───────────┐│ 10011111  │  %@AB@%SETG/SETNLE%@AE@%   ZF=0 or SF=OF   Set if greater/not less or └───────────┘                                equal (signed comparisons)┌───────────┐│ 10011000  │  %@AB@%SETS%@AE@%          SF=1            Set if sign└───────────┘┌───────────┐│ 10011001  │  %@AB@%SETNS%@AE@%         SF=0            Set if not sign└───────────┘┌───────────┐│ 10010010  │  %@AB@%SETC%@AE@%          CF=1            Set if carry└───────────┘┌───────────┐│ 10010011  │  %@AB@%SETNC%@AE@%         CF=0            Set if not carry└───────────┘┌───────────┐│ 10010000  │  %@AB@%SETO%@AE@%          OF=1            Set if overflow└───────────┘┌───────────┐│ 10010001  │  %@AB@%SETNO%@AE@%         OF=0            Set if not overflow└───────────┘┌───────────┐│ 10011010  │  %@AB@%SETP/SETPE%@AE@%    PF=1            Set if parity/parity even└───────────┘┌───────────┐│ 10011011  │  %@AB@%SETNP/SETPO%@AE@%   PF=0            Set if no parity/parity odd└───────────┘%@TE: 057 02646 01 15 14 16 31 @%
  5097. %@CR:102       @%%@NL@%
  5098. %@3@%%@AB@%SGDT/SIDT/SLDT%@AE@%%@CR:SGDT      @%%@EH@%%@QR:sgdt@%%@QR:sidt@%%@QR:sldt@%%@NL@%
  5099. %@AB@%Store Descriptor Table%@AE@%%@QR:store descriptor table@%%@QR:store descriptor@%%@QR:store table@%%@NL@%
  5100. %@AB@%80286/386 Privileged Only%@AE@%%@NL@%
  5101. ┌───┬───┬───┬───┬───┬───┬───┬───┬───┐%@NL@%
  5102. │ O │ D │ I │ T │ S │ Z │ A │ P │ C │%@NL@%
  5103. ├───┼───┼───┼───┼───┼───┼───┼───┼───┤%@NL@%
  5104. │   │   │   │   │   │   │   │   │   │%@NL@%
  5105. └───┴───┴───┴───┴───┴───┴───┴───┴───┘%@NL@%
  5106. %@NL@%
  5107. %@4@%Stores a Descriptor Table register into a specified operand.%@EH@%
  5108. %@AB@%SGDT%@AE@% stores the Global Descriptor Table; %@AB@%SIDT%@AE@%, the Interrupt
  5109. Descriptor Table; and %@AB@%SLDT%@AE@%, the Local Descriptor table.
  5110. These instructions are available only in privileged mode.
  5111. See Intel documentation for details on descriptor tables
  5112. and other privileged-mode concepts.%@NL@%
  5113. %@NL@%
  5114. ───────────────────────────────────────────────────────────────────────────%@NL@%
  5115. ┌───────────┐ ┌───────────┐ ┌─────────────┐%@NL@%
  5116. │ 00001111  │ │ 00000001  │ │ %@AI@%mod%@AE@%,000,%@AI@%r/m%@AE@% │     %@AI@%disp%@AE@% %@AI@%(2)%@AE@%%@NL@%
  5117. └───────────┘ └───────────┘ └─────────────┘%@NL@%
  5118. ───────────────────┬─────────────────────────┬─────────────────────────────%@NL@%
  5119.                    │ sgdt   descriptor       │ 88/86   ─%@NL@%
  5120. %@AB@%SGDT  %@AI@%mem64%@AE@%        │                         │   286   11%@NL@%
  5121.                    │                         │   386   9%@NL@%
  5122. ───────────────────┴─────────────────────────┴─────────────────────────────%@NL@%
  5123. ┌───────────┐ ┌───────────┐ ┌─────────────┐%@NL@%
  5124. │ 00001111  │ │ 00000001  │ │ %@AI@%mod%@AE@%,001,%@AI@%r/m%@AE@% │      %@AI@%disp%@AE@% %@AI@%(2)%@AE@%%@NL@%
  5125. └───────────┘ └───────────┘ └─────────────┘%@NL@%
  5126. ───────────────────┬─────────────────────────┬─────────────────────────────%@NL@%
  5127.                    │ sidt   descriptor       │ 88/86   ─%@NL@%
  5128. %@AB@%SIDT  %@AI@%mem64%@AE@%        │                         │   286   12%@NL@%
  5129.                    │                         │   386   9%@NL@%
  5130. ───────────────────┴─────────────────────────┴─────────────────────────────%@NL@%
  5131. ┌───────────┐ ┌───────────┐ ┌─────────────┐%@NL@%
  5132. │ 00001111  │ │ 00000000  │ │ %@AI@%mod%@AE@%,000,%@AI@%r/m%@AE@% │     %@AI@%disp%@AE@% %@AI@%(0%@AE@% %@AI@%or%@AE@% %@AI@%2)%@AE@%%@NL@%
  5133. └───────────┘ └───────────┘ └─────────────┘%@NL@%
  5134. ───────────────────┬─────────────────────────┬─────────────────────────────%@NL@%
  5135.                    │ sldt   ax               │ 88/86   ─%@NL@%
  5136. %@AB@%SLDT  %@AI@%reg16%@AE@%        │                         │   286   2%@NL@%
  5137.                    │                         │   386   2%@NL@%
  5138. ───────────────────┼─────────────────────────┼─────────────────────────────%@NL@%
  5139.                    │ sldt   selector         │ 88/86   ─%@NL@%
  5140. %@AB@%SLDT  %@AI@%mem16%@AE@%        │                         │   286   3%@NL@%
  5141.                    │                         │   386   2%@NL@%
  5142. ───────────────────┴─────────────────────────┴─────────────────────────────%@NL@%
  5143. %@NL@%
  5144. %@NL@%
  5145. %@NL@%
  5146. %@3@%%@AB@%SHL/SHR%@AE@%%@CR:SHL       @%%@EH@%%@QR:shl@%%@QR:shr@%%@NL@%
  5147. %@AB@%Shift%@AE@%%@QR:shift@%%@QR:shift right@%%@QR:shift left@%%@NL@%
  5148. %@NL@%
  5149. %@4@%See %@AB@%SAL/SAR%@AE@%%@BO:     4a310@%%@EH@%%@NL@%
  5150. %@NL@%
  5151. %@NL@%
  5152. %@CR:103       @%%@NL@%
  5153. %@3@%%@AB@%SHLD/SHRD%@AE@%%@CR:SHLD      @%%@EH@%%@QR:shld@%%@QR:shrd@%%@NL@%
  5154. %@AB@%Double Precision Shift%@AE@%%@QR:double precision shift@%%@QR:shift@%%@NL@%
  5155. %@AB@%80386 Only%@AE@%%@NL@%
  5156. ┌───┬───┬───┬───┬───┬───┬───┬───┬───┐%@NL@%
  5157. │ O │ D │ I │ T │ S │ Z │ A │ P │ C │%@NL@%
  5158. ├───┼───┼───┼───┼───┼───┼───┼───┼───┤%@NL@%
  5159. │ ? │   │   │   │ ± │ ± │   │ ± │ ± │%@NL@%
  5160. └───┴───┴───┴───┴───┴───┴───┴───┴───┘%@NL@%
  5161. %@NL@%
  5162. %@4@%Shifts the bits of the second operand into the first%@EH@%
  5163. operand. The number of bits shifted is specified by the
  5164. third operand. %@AB@%SHLD%@AE@% shifts the first operand to the left
  5165. by the number of positions specified in the count. The
  5166. positions opened by the shift are filled by the most
  5167. significant bits of the second operand. %@AB@%SHRD%@AE@% shifts the
  5168. first operand to the right by the number of positions
  5169. specified in the count. The positions opened by the shift
  5170. are filled by the least significant bits of the second
  5171. operand. The count operand can be either %@AB@%CL%@AE@% or an 8-bit
  5172. constant. If a shift count larger than 31 is given, it will
  5173. be adjusted by using the remainder (modulus) of a division
  5174. by 32.%@NL@%
  5175. %@NL@%
  5176. ───────────────────────────────────────────────────────────────────────────%@NL@%
  5177. ┌───────────┐ ┌───────────┐ ┌─────────────┐%@NL@%
  5178. │ 00001111  │ │ 10100100  │ │ %@AI@%mod%@AE@%,%@AI@%reg%@AE@%,%@AI@%r/m%@AE@% │     %@AI@%disp%@AE@% %@AI@%(0%@AE@% %@AI@%or%@AE@% %@AI@%2)%@AE@%     %@AI@%data%@AE@% %@AI@%(1)%@AE@%%@NL@%
  5179. └───────────┘ └───────────┘ └─────────────┘%@NL@%
  5180. ────────────────────────────┬───────────────────────┬──────────────────────%@NL@%
  5181. %@AB@%SHLD  %@AI@%reg16%@AE@%,%@AI@%reg16%@AE@%,%@AI@%immed%@AE@% 8   │ shld    ax,dx,10      │ 88/86   ─%@NL@%
  5182. %@AB@%SHLD  %@AI@%reg32%@AE@%,%@AI@%reg32%@AE@%,%@AI@%immed%@AE@% 8   │                       │   286   ─%@NL@%
  5183.                             │                       │   386   3%@NL@%
  5184. ────────────────────────────┼───────────────────────┼──────────────────────%@NL@%
  5185. %@AB@%SHLD  %@AI@%mem16%@AE@%,%@AI@%reg16%@AE@%,%@AI@%immed8%@AE@%    │ shld    bits,cx,5     │ 88/86   ─%@NL@%
  5186. %@AB@%SHLD  %@AI@%mem32%@AE@%,%@AI@%reg32%@AE@%,%@AI@%immed8%@AE@%    │                       │   286   ─%@NL@%
  5187.                             │                       │   386   7%@NL@%
  5188. ────────────────────────────┴───────────────────────┴──────────────────────%@NL@%
  5189. ┌───────────┐ ┌───────────┐ ┌─────────────┐%@NL@%
  5190. │ 00001111  │ │ 10101100  │ │ %@AI@%mod%@AE@%,%@AI@%reg%@AE@%,%@AI@%r/m%@AE@% │     %@AI@%disp%@AE@% %@AI@%(0%@AE@% %@AI@%or%@AE@% %@AI@%2)%@AE@%    %@AI@%data%@AE@% %@AI@%(1)%@AE@%%@NL@%
  5191. └───────────┘ └───────────┘ └─────────────┘%@NL@%
  5192. ────────────────────────────┬───────────────────────┬──────────────────────%@NL@%
  5193. %@AB@%SHRD  %@AI@%reg16%@AE@%,%@AI@%reg16%@AE@%,%@AI@%immed%@AE@% 8   │ shrd    cx,si,3       │ 88/86   ─%@NL@%
  5194. %@AB@%SHRD  %@AI@%reg32%@AE@%,%@AI@%reg32%@AE@%,%@AI@%immed%@AE@% 8   │                       │   286   ─%@NL@%
  5195.                             │                       │   386   3%@NL@%
  5196. ────────────────────────────┼───────────────────────┼──────────────────────%@NL@%
  5197. %@AB@%SHRD  %@AI@%mem16%@AE@%,%@AI@%reg16%@AE@%,%@AI@%immed8%@AE@%    │ shrd    [di],dx,13    │ 88/86   ─%@NL@%
  5198. %@AB@%SHRD  %@AI@%mem32%@AE@%,%@AI@%reg32%@AE@%,%@AI@%immed8%@AE@%    │                       │   286   ─%@NL@%
  5199.                             │                       │   386   7%@NL@%
  5200. ────────────────────────────┴───────────────────────┴──────────────────────%@NL@%
  5201. ┌───────────┐ ┌───────────┐ ┌─────────────┐%@NL@%
  5202. │ 00001111  │ │ 10100101  │ │ %@AI@%mod%@AE@%,%@AI@%reg%@AE@%,%@AI@%r/m%@AE@% │     %@AI@%disp%@AE@% %@AI@%(0%@AE@% %@AI@%or%@AE@% %@AI@%2)%@AE@%%@NL@%
  5203. └───────────┘ └───────────┘ └─────────────┘%@NL@%
  5204. ────────────────────────────┬───────────────────────┬──────────────────────%@NL@%
  5205. %@AB@%SHLD  %@AI@%reg16,reg16%@AE@%,%@AB@%CL%@AE@%        │ shld    ax,dx,cl      │ 88/86    ─%@NL@%
  5206. %@AB@%SHLD  %@AI@%reg32,reg32%@AE@%,%@AB@%CL%@AE@%        │                       │   286    ─%@NL@%
  5207.                             │                       │   386    3%@NL@%
  5208. ────────────────────────────┼───────────────────────┼──────────────────────%@NL@%
  5209. %@AB@%SHLD  %@AI@%mem16%@AE@%,%@AI@%reg16%@AE@%,%@AB@%CL%@AE@%        │ shld    masker,ax,cl  │ 88/86%@NL@%
  5210. %@AB@%SHLD  %@AI@%mem32%@AE@%,%@AI@%reg32%@AE@%,%@AB@%CL%@AE@%        │                       │   286%@NL@%
  5211.                             │                       │   386    7%@NL@%
  5212. ────────────────────────────┴───────────────────────┴──────────────────────%@NL@%
  5213. ┌───────────┐ ┌───────────┐ ┌─────────────┐%@NL@%
  5214. │ 00001111  │ │ 10101101  │ │ %@AI@%mod%@AE@%,%@AI@%reg%@AE@%,%@AI@%r/m%@AE@% │     %@AI@%disp%@AE@% %@AI@%(0%@AE@% %@AI@%or%@AE@% %@AI@%2)%@AE@%%@NL@%
  5215. └───────────┘ └───────────┘ └─────────────┘%@NL@%
  5216. ────────────────────────────┬───────────────────────┬──────────────────────%@NL@%
  5217. %@AB@%SHRD  %@AI@%reg16,reg16%@AE@%,%@AB@%CL%@AE@%        │ shrd    bx,dx,cl      │ 88/86    ─%@NL@%
  5218. %@AB@%SHRD  %@AI@%reg32,reg32%@AE@%,%@AB@%CL%@AE@%        │                       │   286    ─%@NL@%
  5219.                             │                       │   386    3%@NL@%
  5220. ────────────────────────────┼───────────────────────┼──────────────────────%@NL@%
  5221. %@AB@%SHRD  %@AI@%mem16%@AE@%,%@AI@%reg16%@AE@%,%@AB@%CL%@AE@%        │ shrd    [bx],dx,cl    │ 88/86%@NL@%
  5222. %@AB@%SHRD  %@AI@%mem32%@AE@%,%@AI@%reg32%@AE@%,%@AB@%CL%@AE@%        │                       │   286%@NL@%
  5223.                             │                       │   386    7%@NL@%
  5224. ────────────────────────────┴───────────────────────┴──────────────────────%@NL@%
  5225. %@NL@%
  5226. %@NL@%
  5227. %@CR:104       @%%@NL@%
  5228. %@3@%%@AB@%SMSW%@AE@%%@CR:SMSW      @%%@EH@%%@QR:smsw@%%@NL@%
  5229. %@AB@%Store Machine Status Word%@AE@%%@QR:store machine status word@%%@QR:store status word@%%@QR:machine status word@%%@QR:store word@%%@NL@%
  5230. %@AB@%80286/386 Privileged Only%@AE@%%@NL@%
  5231. ┌───┬───┬───┬───┬───┬───┬───┬───┬───┐%@NL@%
  5232. │ O │ D │ I │ T │ S │ Z │ A │ P │ C │%@NL@%
  5233. ├───┼───┼───┼───┼───┼───┼───┼───┼───┤%@NL@%
  5234. │   │   │   │   │   │   │   │   │   │%@NL@%
  5235. └───┴───┴───┴───┴───┴───┴───┴───┴───┘%@NL@%
  5236. %@NL@%
  5237. %@4@%Stores the Machine Status Word (MSW) into a specified memory%@EH@%
  5238. operand. %@AB@%SMSW%@AE@% is available only in privileged mode. See Intel
  5239. documentation for details on the MSW and other privileged-mode
  5240. concepts.%@NL@%
  5241. %@NL@%
  5242. ───────────────────────────────────────────────────────────────────────────%@NL@%
  5243. ┌───────────┐  ┌───────────┐ ┌─────────────┐%@NL@%
  5244. │ 00001111  │  │ 00000001  │ │ %@AI@%mod%@AE@%,100,%@AI@%r/m%@AE@% │     %@AI@%disp%@AE@% %@AI@%(0%@AE@% %@AI@%or%@AE@% %@AI@%2)%@AE@%%@NL@%
  5245. └───────────┘  └───────────┘ └─────────────┘%@NL@%
  5246. ───────────────────┬─────────────────────────┬─────────────────────────────%@NL@%
  5247.                    │ smsw   ax               │ 88/86   ─%@NL@%
  5248. %@AB@%SMSW  %@AI@%reg16%@AE@%        │                         │   286   2%@NL@%
  5249.                    │                         │   386   10%@NL@%
  5250. ───────────────────┼─────────────────────────┼─────────────────────────────%@NL@%
  5251.                    │ smsw   machine          │ 88/86   ─%@NL@%
  5252. %@AB@%SMSW  %@AI@%mem16%@AE@%        │                         │   286   3%@NL@%
  5253.                    │                         │   386   13%@NL@%
  5254. ───────────────────┴─────────────────────────┴─────────────────────────────%@NL@%
  5255. %@NL@%
  5256. %@NL@%
  5257. %@NL@%
  5258. %@3@%%@AB@%STC%@AE@%%@CR:STC       @%%@EH@%%@QR:stc@%%@NL@%
  5259. %@AB@%Set Carry Flag%@AE@%%@QR:set carry flag@%%@QR:carry flag@%%@NL@%
  5260. ┌───┬───┬───┬───┬───┬───┬───┬───┬───┐%@NL@%
  5261. │ O │ D │ I │ T │ S │ Z │ A │ P │ C │%@NL@%
  5262. ├───┼───┼───┼───┼───┼───┼───┼───┼───┤%@NL@%
  5263. │   │   │   │   │   │   │   │   │ 1 │%@NL@%
  5264. └───┴───┴───┴───┴───┴───┴───┴───┴───┘%@NL@%
  5265. %@NL@%
  5266. %@4@%Sets the carry flag.%@EH@%%@NL@%
  5267. %@NL@%
  5268. ───────────────────────────────────────────────────────────────────────────%@NL@%
  5269. ┌───────────┐%@NL@%
  5270. │ 11111001  │%@NL@%
  5271. └───────────┘%@NL@%
  5272. ────────────────┬─────────────────────────┬────────────────────────────────%@NL@%
  5273.                 │ stc                     │ 88/86   2%@NL@%
  5274. %@AB@%STC%@AE@%             │                         │   286   2%@NL@%
  5275.                 │                         │   386   2%@NL@%
  5276. ────────────────┴─────────────────────────┴────────────────────────────────%@NL@%
  5277. %@NL@%
  5278. %@NL@%
  5279. %@CR:105       @%%@NL@%
  5280. %@3@%%@AB@%STD%@AE@%%@CR:STD       @%%@EH@%%@QR:std@%%@NL@%
  5281. %@AB@%Set Direction Flag%@AE@%%@QR:set direction flag@%%@QR:direction flag@%%@NL@%
  5282. ┌───┬───┬───┬───┬───┬───┬───┬───┬───┐%@NL@%
  5283. │ O │ D │ I │ T │ S │ Z │ A │ P │ C │%@NL@%
  5284. ├───┼───┼───┼───┼───┼───┼───┼───┼───┤%@NL@%
  5285. │   │ 1 │   │   │   │   │   │   │   │%@NL@%
  5286. └───┴───┴───┴───┴───┴───┴───┴───┴───┘%@NL@%
  5287. %@NL@%
  5288. %@4@%Sets the direction flag. All subsequent string instructions%@EH@%
  5289. will process down (from high addresses to low addresses).%@NL@%
  5290. %@NL@%
  5291. ───────────────────────────────────────────────────────────────────────────%@NL@%
  5292. ┌───────────┐%@NL@%
  5293. │ 11111101  │%@NL@%
  5294. └───────────┘%@NL@%
  5295. ────────────────┬─────────────────────────┬────────────────────────────────%@NL@%
  5296.                 │ std                     │ 88/86   2%@NL@%
  5297. %@AB@%STD%@AE@%             │                         │   286   2%@NL@%
  5298.                 │                         │   386   2%@NL@%
  5299. ────────────────┴─────────────────────────┴────────────────────────────────%@NL@%
  5300. %@NL@%
  5301. %@NL@%
  5302. %@NL@%
  5303. %@3@%%@AB@%STI%@AE@%%@CR:STI       @%%@EH@%%@QR:sti@%%@NL@%
  5304. %@AB@%Set Interrupt Flag%@AE@%%@QR:set interrupt flag@%%@QR:interrupt flag@%%@NL@%
  5305. ┌───┬───┬───┬───┬───┬───┬───┬───┬───┐%@NL@%
  5306. │ O │ D │ I │ T │ S │ Z │ A │ P │ C │%@NL@%
  5307. ├───┼───┼───┼───┼───┼───┼───┼───┼───┤%@NL@%
  5308. │   │   │ 1 │   │   │   │   │   │   │%@NL@%
  5309. └───┴───┴───┴───┴───┴───┴───┴───┴───┘%@NL@%
  5310. %@NL@%
  5311. %@4@%Sets the interrupt flag. When the interrupt flag is set,%@EH@%
  5312. maskable interrupts are recognized. If interrupts were
  5313. disabled by a previous %@AB@%CLI%@AE@% instruction, pending interrupts
  5314. will not be executed immediately; they will be executed
  5315. after the instruction following %@AB@%STI%@AE@%.%@NL@%
  5316. %@NL@%
  5317. ───────────────────────────────────────────────────────────────────────────%@NL@%
  5318. ┌───────────┐%@NL@%
  5319. │ 11111011  │%@NL@%
  5320. └───────────┘%@NL@%
  5321. ────────────────┬─────────────────────────┬────────────────────────────────%@NL@%
  5322.                 │ sti                     │ 88/86   2%@NL@%
  5323. %@AB@%STI%@AE@%             │                         │   286   2%@NL@%
  5324.                 │                         │   386   3%@NL@%
  5325. ────────────────┴─────────────────────────┴────────────────────────────────%@NL@%
  5326. %@NL@%
  5327. %@NL@%
  5328. %@CR:106       @%%@NL@%
  5329. %@3@%%@AB@%STOS/STOSB/STOSW/STOSD%@AE@%%@CR:STOS      @%%@EH@%%@QR:stos@%%@QR:stosb@%%@QR:stosw@%%@QR:stosd@%%@NL@%
  5330. %@AB@%Store String Data%@AE@%%@QR:store string data@%%@QR:store string@%%@NL@%
  5331. ┌───┬───┬───┬───┬───┬───┬───┬───┬───┐%@NL@%
  5332. │ O │ D │ I │ T │ S │ Z │ A │ P │ C │%@NL@%
  5333. ├───┼───┼───┼───┼───┼───┼───┼───┼───┤%@NL@%
  5334. │   │   │   │   │   │   │   │   │   │%@NL@%
  5335. └───┴───┴───┴───┴───┴───┴───┴───┴───┘%@NL@%
  5336. %@NL@%
  5337. %@4@%Stores the value in the accumulator to a string. The string%@EH@%
  5338. to be filled is the destination and must be pointed to by %@AB@%ES%@AE@%:%@AB@%DI%@AE@%
  5339. (even if an operand is given). For each source element loaded,
  5340. %@AB@%DI%@AE@% is adjusted according to the size of the operands and the
  5341. status of the direction flag. %@AB@%DI%@AE@% is increased if the direction
  5342. flag has been cleared with %@AB@%CLD%@AE@% or decreased if the direction
  5343. flag has been set with %@AB@%STD%@AE@%.%@NL@%
  5344. %@NL@%
  5345. %@4@%If the %@AB@%STOS%@AE@% form of the instruction is used, an operand must%@EH@%
  5346. be provided to indicate the size of the data elements to be
  5347. processed. No segment override is allowed. If %@AB@%STOSB%@AE@% (bytes),
  5348. %@AB@%STOSW%@AE@% (words), or %@AB@%STOSD%@AE@% (doublewords on the 80386 only) is
  5349. used, the instruction determines the size of the data elements
  5350. to be processed and whether the element will be from %@AB@%AL%@AE@%, %@AB@%AX%@AE@%,
  5351. or %@AB@%EAX%@AE@%. No operand is allowed.%@NL@%
  5352. %@NL@%
  5353. %@4@%%@AB@%STOS%@AE@% and its variations are often used with the %@AB@%REP%@AE@% prefix.%@EH@%
  5354. Before the repeated instruction is executed, %@AB@%CX%@AE@% should contain
  5355. the number of elements to store.%@NL@%
  5356. %@NL@%
  5357. ───────────────────────────────────────────────────────────────────────────%@NL@%
  5358. ┌───────────┐%@NL@%
  5359. │ 1010101%@AI@%w%@AE@%  │%@NL@%
  5360. └───────────┘%@NL@%
  5361. ─────────────────┬────────────────────────┬────────────────────────────────%@NL@%
  5362. %@AB@%STOS  %@AE@%«%@AB@%ES%@AE@%:»%@AI@%dest%@AE@%  │ stos  es:dstring       │ 88/86   11 (W88=15)%@NL@%
  5363. %@AB@%STOSB%@AE@%            │ rep    stosw           │   286   3%@NL@%
  5364. %@AB@%STOSW%@AE@%            │ rep    stosb           │   386   4%@NL@%
  5365. ─────────────────┴────────────────────────┴────────────────────────────────%@NL@%
  5366. %@NL@%
  5367. %@NL@%
  5368. %@CR:107       @%%@NL@%
  5369. %@3@%%@AB@%STR%@AE@%%@CR:STR       @%%@EH@%%@QR:str@%%@NL@%
  5370. %@AB@%Store Task Register%@AE@%%@QR:store task register@%%@QR:store task@%%@QR:task register@%%@NL@%
  5371. %@AB@%80286/386 Privileged Only%@AE@%%@NL@%
  5372. ┌───┬───┬───┬───┬───┬───┬───┬───┬───┐%@NL@%
  5373. │ O │ D │ I │ T │ S │ Z │ A │ P │ C │%@NL@%
  5374. ├───┼───┼───┼───┼───┼───┼───┼───┼───┤%@NL@%
  5375. │   │   │   │   │   │   │   │   │   │%@NL@%
  5376. └───┴───┴───┴───┴───┴───┴───┴───┴───┘%@NL@%
  5377. %@NL@%
  5378. %@4@%Stores the current task register to the specified operand.%@EH@%
  5379. This instruction is only available in privileged mode. See
  5380. Intel documentation for details on task registers and other
  5381. privileged-mode concepts.%@NL@%
  5382. %@NL@%
  5383. ───────────────────────────────────────────────────────────────────────────%@NL@%
  5384. ┌───────────┐ ┌───────────┐ ┌─────────────┐%@NL@%
  5385. │ 00001111  │ │ 00000000  │ │ %@AI@%mod%@AE@%,001,%@AI@%reg%@AE@% │     %@AI@%disp%@AE@% %@AI@%(0%@AE@% %@AI@%or%@AE@% %@AI@%2)%@AE@%%@NL@%
  5386. └───────────┘ └───────────┘ └─────────────┘%@NL@%
  5387. ───────────────────┬─────────────────────────┬─────────────────────────────%@NL@%
  5388.                    │ str    cx               │ 88/86   ─%@NL@%
  5389. %@AB@%STR  %@AI@%reg16%@AE@%         │                         │   286   2%@NL@%
  5390.                    │                         │   386   2%@NL@%
  5391. ───────────────────┼─────────────────────────┼─────────────────────────────%@NL@%
  5392.                    │ str    taskreg          │ 88/86   ─%@NL@%
  5393. %@AB@%STR  %@AI@%mem16%@AE@%         │                         │   286   3%@NL@%
  5394.                    │                         │   386   2%@NL@%
  5395. ───────────────────┴─────────────────────────┴─────────────────────────────%@NL@%
  5396. %@NL@%
  5397. %@NL@%
  5398. %@CR:108       @%%@NL@%
  5399. %@3@%%@AB@%SUB%@AE@%%@CR:SUB       @%%@EH@%%@QR:sub@%%@NL@%
  5400. %@AB@%Subtract%@AE@%%@QR:subtract@%%@NL@%
  5401. ┌───┬───┬───┬───┬───┬───┬───┬───┬───┐%@NL@%
  5402. │ O │ D │ I │ T │ S │ Z │ A │ P │ C │%@NL@%
  5403. ├───┼───┼───┼───┼───┼───┼───┼───┼───┤%@NL@%
  5404. │ ± │   │   │   │ ± │ ± │ ± │ ± │ ± │%@NL@%
  5405. └───┴───┴───┴───┴───┴───┴───┴───┴───┘%@NL@%
  5406. %@NL@%
  5407. %@4@%Subtracts the source operand from the destination operand%@EH@%
  5408. and stores the result in the destination operand.%@NL@%
  5409. %@NL@%
  5410. ───────────────────────────────────────────────────────────────────────────%@NL@%
  5411. ┌───────────┐ ┌─────────────┐%@NL@%
  5412. │ 001010%@AI@%dw%@AE@%  │ │ %@AI@%mod%@AE@%,%@AI@%reg%@AE@%,%@AI@%r/m%@AE@% │     %@AI@%disp%@AE@% %@AI@%(0%@AE@% %@AI@%or%@AE@% %@AI@%2)%@AE@%%@NL@%
  5413. └───────────┘ └─────────────┘%@NL@%
  5414. ──────────────────┬───────────────────────────┬────────────────────────────%@NL@%
  5415.                   │ sub    ax,bx              │ 88/86   3%@NL@%
  5416. %@AB@%SUB  %@AI@%reg%@AE@%,%@AI@%reg%@AE@%      │ sub    bh,dh              │   286   2%@NL@%
  5417.                   │                           │   386   2%@NL@%
  5418. ──────────────────┼───────────────────────────┼────────────────────────────%@NL@%
  5419.                   │ sub    tally,bx           │ 88/86   16+EA (W88=24+EA)%@NL@%
  5420. %@AB@%SUB  %@AI@%mem%@AE@%,%@AI@%reg%@AE@%      │ sub    array[di],bl       │   286   7%@NL@%
  5421.                   │                           │   386   6%@NL@%
  5422. ──────────────────┼───────────────────────────┼────────────────────────────%@NL@%
  5423.                   │ sub    cx,discard         │ 88/86   9+EA (W88=13+EA)%@NL@%
  5424. %@AB@%SUB  %@AI@%reg%@AE@%,%@AI@%mem%@AE@%      │ sub    al,[bx]            │   286   7%@NL@%
  5425.                   │                           │  386  7%@NL@%
  5426. ──────────────────┴───────────────────────────┴────────────────────────────%@NL@%
  5427. ┌───────────┐ ┌─────────────┐%@NL@%
  5428. │ 100000%@AI@%sw%@AE@%  │ │ %@AI@%mod%@AE@%,101,%@AI@%r/m%@AE@% │     %@AI@%disp%@AE@% %@AI@%(0%@AE@% %@AI@%or%@AE@% %@AI@%2)%@AE@%     %@AI@%data%@AE@% %@AI@%(1%@AE@% %@AI@%or%@AE@% %@AI@%2)%@AE@%%@NL@%
  5429. └───────────┘ └─────────────┘%@NL@%
  5430. ──────────────────┬───────────────────────────┬────────────────────────────%@NL@%
  5431.                   │ sub    dx,45              │ 88/86   4%@NL@%
  5432. %@AB@%SUB  %@AI@%reg%@AE@%,%@AI@%immed%@AE@%    │ sub    bl,7               │   286   3%@NL@%
  5433.                   │                           │   386   2%@NL@%
  5434. ──────────────────┼───────────────────────────┼────────────────────────────%@NL@%
  5435.                   │ sub    total,4000         │ 88/86   17+EA (W88=25+EA)%@NL@%
  5436. %@AB@%SUB  %@AI@%mem%@AE@%,%@AI@%immed%@AE@%    │ sub    BYTE PTR [bx+di],2 │   286   7%@NL@%
  5437.                   │                           │   386   7%@NL@%
  5438. ──────────────────┴───────────────────────────┴────────────────────────────%@NL@%
  5439. ┌───────────┐%@NL@%
  5440. │ 0010110%@AI@%w%@AE@%  │     %@AI@%data%@AE@% %@AI@%(1%@AE@% %@AI@%or%@AE@% %@AI@%2)%@AE@%%@NL@%
  5441. └───────────┘%@NL@%
  5442. ──────────────────┬───────────────────────────┬────────────────────────────%@NL@%
  5443.                   │ sub    ax,32000           │ 88/86   4%@NL@%
  5444. %@AB@%SUB  %@AI@%accum%@AE@%,%@AI@%immed%@AE@%  │                           │   286   3%@NL@%
  5445.                   │                           │   386   2%@NL@%
  5446. ──────────────────┴───────────────────────────┴────────────────────────────%@NL@%
  5447. %@NL@%
  5448. %@NL@%
  5449. %@CR:109       @%%@NL@%
  5450. %@3@%%@AB@%TEST%@AE@%%@CR:TEST      @%%@EH@%%@QR:test@%%@NL@%
  5451. %@AB@%Logical Compare%@AE@%%@QR:logical compare@%%@QR:compare@%%@NL@%
  5452. ┌───┬───┬───┬───┬───┬───┬───┬───┬───┐%@NL@%
  5453. │ O │ D │ I │ T │ S │ Z │ A │ P │ C │%@NL@%
  5454. ├───┼───┼───┼───┼───┼───┼───┼───┼───┤%@NL@%
  5455. │ 0 │   │   │   │ ± │ ± │ ? │ ± │ 0 │%@NL@%
  5456. └───┴───┴───┴───┴───┴───┴───┴───┴───┘%@NL@%
  5457. %@NL@%
  5458. %@4@%Tests specified bits of an operand and sets the flags for a%@EH@%
  5459. subsequent conditional jump or set instruction. One of the
  5460. operands contains the value to be tested. The other contains
  5461. a bit mask indicating the bits to be tested. %@AB@%TEST%@AE@% works by
  5462. doing a logical bitwise AND on the source and destination
  5463. operands. The flags are modified according to the result,
  5464. but the destination operand is not changed. This instruction
  5465. is the same as the %@AB@%AND%@AE@% instruction, except that the result
  5466. is not stored.%@NL@%
  5467. %@NL@%
  5468. ───────────────────────────────────────────────────────────────────────────%@NL@%
  5469. ┌───────────┐ ┌─────────────┐%@NL@%
  5470. │ 1000011%@AI@%w%@AE@%  │ │ %@AI@%mod%@AE@%,%@AI@%reg%@AE@%,%@AI@%r/m%@AE@% │     %@AI@%disp%@AE@% %@AI@%(0%@AE@% %@AI@%or%@AE@% %@AI@%2)%@AE@%%@NL@%
  5471. └───────────┘ └─────────────┘%@NL@%
  5472. ──────────────────┬──────────────────────────┬─────────────────────────────%@NL@%
  5473.                   │ test   dx,bx             │ 88/86   3%@NL@%
  5474. %@AB@%TEST  %@AI@%reg%@AE@%,%@AI@%reg%@AE@%     │ test   bl,ch             │   286   2%@NL@%
  5475.                   │                          │   386   2%@NL@%
  5476. ──────────────────┼──────────────────────────┼─────────────────────────────%@NL@%
  5477. %@AB@%TEST  %@AI@%mem%@AE@%,%@AI@%reg%@AE@%%@FN@%
  5478. %@FC@%1. %@AB@%MASM%@AE@% transposes %@AB@%TEST %@AI@%mem%@AB@%,%@AI@%reg%@AE@% so
  5479. %@FC@%that it is encoded as %@AB@%TEST %@AI@%reg%@AB@%,%@AI@%mem%@AE@%.%@EF@%1   │ test   dx,flags          │ 88/86   9+EA (W88=13+EA)%@NL@%
  5480. %@AB@%TEST  %@AI@%reg%@AE@%,%@AI@%mem%@AE@%     │ test   bl,bitarray[bx]   │   286   6%@NL@%
  5481.                   │                          │   386   5%@NL@%
  5482. ──────────────────┴──────────────────────────┴─────────────────────────────%@NL@%
  5483. ┌───────────┐ ┌─────────────┐%@NL@%
  5484. │ 1111011%@AI@%w%@AE@%  │ │ %@AI@%mod%@AE@%,000,%@AI@%r/m%@AE@% │     %@AI@%disp%@AE@% %@AI@%(0%@AE@% %@AI@%or%@AE@% %@AI@%2)%@AE@%     %@AI@%data%@AE@% %@AI@%(1%@AE@% %@AI@%or%@AE@% %@AI@%2)%@AE@%%@NL@%
  5485. └───────────┘ └─────────────┘%@NL@%
  5486. ──────────────────┬──────────────────────────┬─────────────────────────────%@NL@%
  5487.                   │ test   cx,30h            │ 88/86   5%@NL@%
  5488. %@AB@%TEST  %@AI@%reg%@AE@%,%@AI@%immed%@AE@%   │ test   cl,1011b          │   286   3%@NL@%
  5489.                   │                          │   386   2%@NL@%
  5490. ──────────────────┼──────────────────────────┼─────────────────────────────%@NL@%
  5491.                   │ test   masker,1          │ 88/86   11+EA%@NL@%
  5492. %@AB@%TEST  %@AI@%mem%@AE@%,%@AI@%immed%@AE@%   │ test   BYTE PTR [bx],03h │   286   6%@NL@%
  5493.                   │                          │   386   5%@NL@%
  5494. ──────────────────┴──────────────────────────┴─────────────────────────────%@NL@%
  5495. ┌───────────┐%@NL@%
  5496. │ 1010100%@AI@%w%@AE@%  │     %@AI@%data%@AE@% %@AI@%(1%@AE@% %@AI@%or%@AE@% %@AI@%2)%@AE@%%@NL@%
  5497. └───────────┘%@NL@%
  5498. ──────────────────┬──────────────────────────┬─────────────────────────────%@NL@%
  5499.                   │ test   ax,90h            │ 88/86   4%@NL@%
  5500. %@AB@%TEST  %@AI@%accum%@AE@%,%@AI@%immed%@AE@% │                          │   286   3%@NL@%
  5501.                   │                          │   386   2%@NL@%
  5502. ──────────────────┴──────────────────────────┴─────────────────────────────%@NL@%
  5503. %@NL@%
  5504. %@NL@%
  5505. %@CR:110       @%%@NL@%
  5506. %@3@%%@AB@%VERR/VERW%@AE@%%@CR:VERR      @%%@EH@%%@QR:verr@%%@QR:verw@%%@NL@%
  5507. %@AB@%Verify Read or Write%@AE@%%@QR:verify read@%%@QR:verify@%%@QR:verify write@%%@NL@%
  5508. %@AB@%80286/386 Protected Only%@AE@%%@NL@%
  5509. ┌───┬───┬───┬───┬───┬───┬───┬───┬───┐%@NL@%
  5510. │ O │ D │ I │ T │ S │ Z │ A │ P │ C │%@NL@%
  5511. ├───┼───┼───┼───┼───┼───┼───┼───┼───┤%@NL@%
  5512. │   │   │   │   │   │ ± │   │   │   │%@NL@%
  5513. └───┴───┴───┴───┴───┴───┴───┴───┴───┘%@NL@%
  5514. %@NL@%
  5515. %@4@%Verifies that a specified segment selector is valid and can%@EH@%
  5516. be read or written to at the current privilege level. %@AB@%VERR%@AE@%
  5517. verifies that the selector is readable. %@AB@%VERW%@AE@% verifies that
  5518. the selector can be written to. If the segment is verified,
  5519. the zero flag is set. Otherwise the zero flag is cleared.
  5520. These instructions are available only in privileged mode.
  5521. See Intel documentation for details on segment selectors
  5522. and other privileged-mode concepts.%@NL@%
  5523. %@NL@%
  5524. ───────────────────────────────────────────────────────────────────────────%@NL@%
  5525. ┌───────────┐ ┌───────────┐ ┌─────────────┐%@NL@%
  5526. │ 00001111  │ │ 00000000  │ │ %@AI@%mod%@AE@%,100,%@AI@%r/m%@AE@% │     %@AI@%disp%@AE@% %@AI@%(0%@AE@% %@AI@%or%@AE@% %@AI@%2)%@AE@%%@NL@%
  5527. └───────────┘ └───────────┘ └─────────────┘%@NL@%
  5528. ────────────────┬─────────────────────────┬────────────────────────────────%@NL@%
  5529.                 │ verr   ax               │ 88/86   ─%@NL@%
  5530. %@AB@%VERR  %@AI@%reg16%@AE@%     │                         │   286   14%@NL@%
  5531.                 │                         │   386   10%@NL@%
  5532. ────────────────┼─────────────────────────┼────────────────────────────────%@NL@%
  5533.                 │ verr   selector         │ 88/86   ─%@NL@%
  5534. %@AB@%VERR  %@AI@%mem16%@AE@%     │                         │   286   16%@NL@%
  5535.                 │                         │   386   11%@NL@%
  5536. ────────────────┴─────────────────────────┴────────────────────────────────%@NL@%
  5537. ┌───────────┐ ┌───────────┐ ┌─────────────┐%@NL@%
  5538. │ 00001111  │ │ 00000000  │ │ %@AI@%mod%@AE@%,101,%@AI@%r/m%@AE@% │     %@AI@%disp%@AE@% %@AI@%(0%@AE@% %@AI@%or%@AE@% %@AI@%2)%@AE@%%@NL@%
  5539. └───────────┘ └───────────┘ └─────────────┘%@NL@%
  5540. ────────────────┬──────────────────────────┬───────────────────────────────%@NL@%
  5541.                 │ verw   cx                │ 88/86   ─%@NL@%
  5542. %@AB@%VERW  %@AI@%reg16%@AE@%     │                          │   286   14%@NL@%
  5543.                 │                          │   386   15%@NL@%
  5544. ────────────────┼──────────────────────────┼───────────────────────────────%@NL@%
  5545.                 │ verw   selector          │ 88/86   ─%@NL@%
  5546. %@AB@%VERW  %@AI@%mem16%@AE@%     │                          │   286   16%@NL@%
  5547.                 │                          │   386   16%@NL@%
  5548. ────────────────┴──────────────────────────┴───────────────────────────────%@NL@%
  5549. %@NL@%
  5550. %@NL@%
  5551. %@CR:111       @%%@NL@%
  5552. %@3@%%@AB@%WAIT%@AE@%%@CR:WAIT      @%%@EH@%%@QR:wait@%%@NL@%
  5553. %@AB@%Wait%@AE@%%@NL@%
  5554. ┌───┬───┬───┬───┬───┬───┬───┬───┬───┐%@NL@%
  5555. │ O │ D │ I │ T │ S │ Z │ A │ P │ C │%@NL@%
  5556. ├───┼───┼───┼───┼───┼───┼───┼───┼───┤%@NL@%
  5557. │   │   │   │   │   │   │   │   │   │%@NL@%
  5558. └───┴───┴───┴───┴───┴───┴───┴───┴───┘%@NL@%
  5559. %@NL@%
  5560. %@4@%Suspends CPU execution until a signal is received that a%@EH@%
  5561. coprocessor has finished a simultaneous operation. It should
  5562. be used to prevent a coprocessor instruction from modifying
  5563. a memory location that is being modified at the same time by
  5564. a processor instruction. %@AB@%WAIT%@AE@% is the same as the coprocessor
  5565. %@AB@%FWAIT%@AE@% instruction.%@NL@%
  5566. %@NL@%
  5567. ───────────────────────────────────────────────────────────────────────────%@NL@%
  5568. ┌───────────┐%@NL@%
  5569. │ 10011011  │%@NL@%
  5570. └───────────┘%@NL@%
  5571. ────────────────┬─────────────────────────┬────────────────────────────────%@NL@%
  5572.                 │ wait                    │ 88/86   4%@NL@%
  5573. %@AB@%WAIT%@AE@%            │                         │   286   3%@NL@%
  5574.                 │                         │   386   6%@NL@%
  5575. ────────────────┴─────────────────────────┴────────────────────────────────%@NL@%
  5576. %@NL@%
  5577. %@NL@%
  5578. %@NL@%
  5579. %@3@%%@AB@%XCHG%@AE@%%@CR:XCHG      @%%@EH@%%@QR:xchg@%%@NL@%
  5580. %@AB@%Exchange%@AE@%%@QR:exchange@%%@NL@%
  5581. ┌───┬───┬───┬───┬───┬───┬───┬───┬───┐%@NL@%
  5582. │ O │ D │ I │ T │ S │ Z │ A │ P │ C │%@NL@%
  5583. ├───┼───┼───┼───┼───┼───┼───┼───┼───┤%@NL@%
  5584. │   │   │   │   │   │   │   │   │   │%@NL@%
  5585. └───┴───┴───┴───┴───┴───┴───┴───┴───┘%@NL@%
  5586. %@NL@%
  5587. %@4@%Exchanges the values of the source and destination operands.%@EH@%%@NL@%
  5588. %@NL@%
  5589. ───────────────────────────────────────────────────────────────────────────%@NL@%
  5590. ┌───────────┐ ┌─────────────┐%@NL@%
  5591. │ 1000011%@AI@%w%@AE@%  │ │ %@AI@%mod%@AE@%,%@AI@%reg%@AE@%,%@AI@%r/m%@AE@% │     %@AI@%disp%@AE@% %@AI@%(0%@AE@% %@AI@%or%@AE@% %@AI@%2)%@AE@%%@NL@%
  5592. └───────────┘ └─────────────┘%@NL@%
  5593. ────────────────┬─────────────────────────┬────────────────────────────────%@NL@%
  5594.                 │ xchg   cx,dx            │ 88/86   4%@NL@%
  5595. %@AB@%XCHG  %@AI@%reg%@AE@%,%@AI@%reg%@AE@%   │ xchg   l,dh             │   286   3%@NL@%
  5596.                 │ xchg   al,ah            │   386   3%@NL@%
  5597. ────────────────┼─────────────────────────┼────────────────────────────────%@NL@%
  5598. %@AB@%XCHG  %@AI@%reg%@AE@%,%@AI@%mem%@AE@%   │ xchg   [bx],ax          │ 88/86   17+EA (W88=25+EA)%@NL@%
  5599. %@AB@%XCHG  %@AI@%mem%@AE@%,%@AI@%reg%@AE@%   │ xchg   bx,pointer       │   286   5%@NL@%
  5600.                 │                         │   386   5%@NL@%
  5601. ────────────────┴─────────────────────────┴────────────────────────────────%@NL@%
  5602. ┌───────────┐%@NL@%
  5603. │ 10010 %@AI@%reg%@AE@% │%@NL@%
  5604. └───────────┘%@NL@%
  5605. ────────────────────┬──────────────────────┬───────────────────────────────%@NL@%
  5606. %@AB@%XCHG  %@AI@%accum%@AE@%,%@AI@%reg16%@AE@%%@FN@%
  5607. %@FC@%1. On the 80386, the accumulator may also be exchanged with a 32-bit 
  5608. %@FC@%register.%@EF@%1 │ xchg  ax,cx          │  88/86   3%@NL@%
  5609. %@AB@%XCHG  %@AI@%reg16%@AE@%,%@AI@%accum%@AE@%%@FN@%
  5610. %@FC@%1. On the 80386, the accumulator may also be exchanged with a 32-bit 
  5611. %@FC@%register.%@EF@%1 │ xchg  cx,ax          │    286   3%@NL@%
  5612.                     │                      │    386   3%@NL@%
  5613. ────────────────────┴──────────────────────┴───────────────────────────────%@NL@%
  5614. %@NL@%
  5615. %@NL@%
  5616. %@CR:112       @%%@NL@%
  5617. %@3@%%@AB@%XLAT/XLATB%@AE@%%@CR:XLAT      @%%@EH@%%@QR:xlat@%%@QR:xlatb@%%@NL@%
  5618. %@AB@%Translate%@AE@%%@QR:translate@%%@NL@%
  5619. ┌───┬───┬───┬───┬───┬───┬───┬───┬───┐%@NL@%
  5620. │ O │ D │ I │ T │ S │ Z │ A │ P │ C │%@NL@%
  5621. ├───┼───┼───┼───┼───┼───┼───┼───┼───┤%@NL@%
  5622. │   │   │   │   │   │   │   │   │   │%@NL@%
  5623. └───┴───┴───┴───┴───┴───┴───┴───┴───┘%@NL@%
  5624. %@NL@%
  5625. %@4@%Translates a value from one coding system to another by%@EH@%
  5626. looking up the value to be translated in a table stored in
  5627. memory. Before the instruction is executed, %@AB@%BX%@AE@% should point
  5628. to a table in memory and %@AB@%AL%@AE@% should contain the unsigned
  5629. position of the value to be translated from the table. After
  5630. the instruction, %@AB@%AL%@AE@% will contain the table value with the
  5631. specified position. No operand is required, but one can be
  5632. given in order to specify a segment override. %@AB@%DS%@AE@% is assumed
  5633. unless a segment override is given. Starting with version
  5634. 5.0, %@AB@%XLATB%@AE@% is recognized as a synonym for %@AB@%XLAT%@AE@%. Either
  5635. version allows an operand, but neither requires one.%@NL@%
  5636. %@NL@%
  5637. ───────────────────────────────────────────────────────────────────────────%@NL@%
  5638. ┌───────────┐%@NL@%
  5639. │ 11010111  │%@NL@%
  5640. └───────────┘%@NL@%
  5641. ────────────────────────┬──────────────────────┬───────────────────────────%@NL@%
  5642. %@AB@%XLAT%@AE@%  ««%@AI@%segreg%@AE@%»:%@AI@%mem%@AE@%»    │ xlat                 │ 88/86   11%@NL@%
  5643. %@AB@%XLATB%@AE@%  ««%@AI@%segreg%@AE@%»:%@AI@%mem%@AE@%»   │ xlatb  es:table      │   286   5%@NL@%
  5644.                         │                      │   386   5%@NL@%
  5645. ────────────────────────┴──────────────────────┴───────────────────────────%@NL@%
  5646. %@NL@%
  5647. %@NL@%
  5648. %@CR:113       @%%@NL@%
  5649. %@3@%%@AB@%XOR%@AE@%%@CR:XOR       @%%@EH@%%@QR:xor@%%@NL@%
  5650. %@AB@%Exclusive OR%@AE@%%@QR:exclusive or@%%@NL@%
  5651. ┌───┬───┬───┬───┬───┬───┬───┬───┬───┐%@NL@%
  5652. │ O │ D │ I │ T │ S │ Z │ A │ P │ C │%@NL@%
  5653. ├───┼───┼───┼───┼───┼───┼───┼───┼───┤%@NL@%
  5654. │ 0 │   │   │   │ ± │ ± │ ? │ ± │ 0 │%@NL@%
  5655. └───┴───┴───┴───┴───┴───┴───┴───┴───┘%@NL@%
  5656. %@NL@%
  5657. %@4@%Performs a bitwise exclusive OR on the source and destination%@EH@%
  5658. operands, and stores the result to the destination. For each bit
  5659. position in the operands, if both bits are set or if both bits
  5660. are cleared, the corresponding bit of the result is cleared.
  5661. Otherwise, the corresponding bit of the result is set.%@NL@%
  5662. %@NL@%
  5663. ───────────────────────────────────────────────────────────────────────────%@NL@%
  5664. ┌───────────┐ ┌─────────────┐%@NL@%
  5665. │ 001100%@AI@%dw%@AE@%  │ │ %@AI@%mod%@AE@%,%@AI@%reg%@AE@%,%@AI@%r/m%@AE@% │     %@AI@%disp%@AE@% %@AI@%(0%@AE@% %@AI@%or%@AE@% %@AI@%2)%@AE@%%@NL@%
  5666. └───────────┘ └─────────────┘%@NL@%
  5667. ────────────────┬─────────────────────────┬────────────────────────────────%@NL@%
  5668.                 │ xor    cx,bx            │ 88/86   3%@NL@%
  5669. %@AB@%XOR  %@AI@%reg%@AE@%,%@AI@%reg%@AE@%    │ xor    ah,al            │   286   2%@NL@%
  5670.                 │                         │   386   2%@NL@%
  5671. ────────────────┼─────────────────────────┼────────────────────────────────%@NL@%
  5672.                 │ xor    [bp+10],cx       │ 88/86   16+EA (W88=24+EA)%@NL@%
  5673. %@AB@%XOR  %@AI@%mem%@AE@%,%@AI@%reg%@AE@%    │ xor    masked,bx        │   286   7%@NL@%
  5674.                 │                         │   386   6%@NL@%
  5675. ────────────────┼─────────────────────────┼────────────────────────────────%@NL@%
  5676.                 │ xor    cx,flags         │ 88/86   9+EA (W88=13+EA)%@NL@%
  5677. %@AB@%XOR  %@AI@%reg%@AE@%,%@AI@%mem%@AE@%    │ xor    bl,bitarray[di]  │   286   7%@NL@%
  5678.                 │                         │   386   7%@NL@%
  5679. ────────────────┴─────────────────────────┴────────────────────────────────%@NL@%
  5680. ┌───────────┐ ┌─────────────┐%@NL@%
  5681. │ 100000%@AI@%sw%@AE@%  │ │ %@AI@%mod%@AE@%,110,%@AI@%r/m%@AE@% │     %@AI@%disp%@AE@% %@AI@%(0%@AE@% %@AI@%or%@AE@% %@AI@%2)%@AE@%     %@AI@%data%@AE@% %@AI@%(1%@AE@% %@AI@%or%@AE@% %@AI@%2)%@AE@%%@NL@%
  5682. └───────────┘ └─────────────┘%@NL@%
  5683. ────────────────┬─────────────────────────┬────────────────────────────────%@NL@%
  5684.                 │ xor    bx,10h           │ 88/86   4%@NL@%
  5685. %@AB@%XOR  %@AI@%reg%@AE@%,%@AI@%immed%@AE@%  │ xor    bl,1             │   286   3%@NL@%
  5686.                 │                         │   386   2%@NL@%
  5687. ────────────────┼─────────────────────────┼────────────────────────────────%@NL@%
  5688.                 │ xor    Boolean,1        │ 88/86   17+EA (W88=25+EA)%@NL@%
  5689. %@AB@%XOR  %@AI@%mem%@AE@%,%@AI@%immed%@AE@%  │ xor    switches[bx],101b│   286   7%@NL@%
  5690.                 │                         │   386   7%@NL@%
  5691. ────────────────┴─────────────────────────┴────────────────────────────────%@NL@%
  5692. ┌───────────┐%@NL@%
  5693. │ 0011010%@AI@%w%@AE@%  │     %@AI@%data%@AE@% %@AI@%(1%@AE@% %@AI@%or%@AE@% %@AI@%2)%@AE@%%@NL@%
  5694. └───────────┘%@NL@%
  5695. ────────────────────┬─────────────────────┬────────────────────────────────%@NL@%
  5696.                     │ xor    ax,01010101b │ 88/86   4%@NL@%
  5697. %@AB@%XOR  %@AI@%accum%@AE@%,%@AI@%immed%@AE@%    │                     │   286   3%@NL@%
  5698.                     │                     │   386   2%@NL@%
  5699. ────────────────────┴─────────────────────┴────────────────────────────────%@NL@%
  5700. %@NL@%
  5701. %@NL@%
  5702. %@CR:114       @%%@CR:115a      @%%@NL@%
  5703. %@1@%%@AB@%Coprocessor%@CR:Coprocesso@%%@AE@%%@EH@%%@QR:coprocessor@%%@NL@%
  5704. %@NL@%
  5705. ───────────────────────────────────────────────────────────────────────────%@NL@%
  5706. %@NL@%
  5707. Interpreting Coprocessor Instructions%@BO:     587d9@%%@QR:coprocessor instructions@%%@NL@%
  5708. %@NL@%
  5709.      Syntax%@BO:     5898f@%%@NL@%
  5710. %@NL@%
  5711.      Examples%@BO:     58bda@%%@NL@%
  5712. %@NL@%
  5713.      Clock Speeds%@BO:     58d76@%%@NL@%
  5714. %@NL@%
  5715.      Instruction Size%@BO:     5917e@%%@NL@%
  5716. %@NL@%
  5717. Architecture%@BO:     5946d@%%@NL@%
  5718. %@NL@%
  5719. Instructions%@BO:     5b04f@%%@NL@%
  5720. %@NL@%
  5721. %@NL@%
  5722. %@CR:115b      @%%@NL@%
  5723. %@AB@%Topical Cross-Reference%@AE@%%@NL@%
  5724. %@NL@%
  5725. %@AU@%Load%@AE@%                            %@AU@%Arithmetic%@AE@%%@NL@%
  5726. %@AB@%FLD/FILD/FBLD%@BO:     5fc99@%                  FADD/FIADD%@BO:     5b34f@%%@AE@%%@NL@%
  5727. %@AB@%FXCH%@BO:     6974f@%                           FADDP%@BO:     5b34f@%%@AE@%%@NL@%
  5728. %@AB@%FLDCW%@BO:     60dd8@%                          FSUB/FISUB%@BO:     66e7c@%%@AE@%%@NL@%
  5729. %@AB@%FLDENV%@BO:     610bb@%                         FSUBP%@BO:     66e7c@%%@AE@%%@NL@%
  5730. %@AB@%FSTENV/FNSTENV%@BO:     66697@%                 FSUBR/FISUBR%@BO:     67718@%%@AE@%%@NL@%
  5731.                                 %@AB@%FSUBRP%@BO:     67718@%%@AE@%%@NL@%
  5732. %@AU@%Store Data%@AE@%                      %@AB@%FMUL/FIMUL%@BO:     61435@%%@AE@%%@NL@%
  5733. %@AB@%FST/FIST%@BO:     6590f@%                       FMULP%@BO:     61435@%%@AE@%%@NL@%
  5734. %@AB@%FSTP/FISTP/FBSTP%@BO:     6590f@%               FSCALE%@BO:     64665@%%@AE@%%@NL@%
  5735. %@AB@%FSTCW/FNSTCW%@BO:     663dd@%                   FDIV/FIDIV%@BO:     5dae6@%%@AE@%%@NL@%
  5736. %@AB@%FSTSW/FNSTSW%@BO:     66a35@%                   FDIVP%@BO:     5dae6@%%@AE@%%@NL@%
  5737. %@AB@%FSAVE/FNSAVE%@BO:     6421a@%                   FDIVR/FIDIVR%@BO:     5e342@%%@AE@%%@NL@%
  5738. %@AB@%FRSTOR%@BO:     63e86@%                         FDIVRP%@BO:     5e342@%%@AE@%%@NL@%
  5739.                                 %@AB@%FABS%@BO:     5b0f1@%%@AE@%%@NL@%
  5740. %@AU@%Load Constant%@AE@%                   %@AB@%FCHS%@BO:     5bd36@%%@AE@%%@NL@%
  5741. %@AB@%FLD1%@BO:     6030b@%                           FRNDINT%@BO:     63ba5@%%@AE@%%@NL@%
  5742. %@AB@%FLDL2E%@BO:     6030b@%                         FSQRT%@BO:     656a1@%%@AE@%%@NL@%
  5743. %@AB@%FLDL2T%@BO:     6030b@%                         FPREM%@BO:     62ad7@%%@AE@%%@NL@%
  5744. %@AB@%FLDLG2%@BO:     6030b@%                         FPREM1%@BO:     6323a@%%@AE@% (80387 only)%@NL@%
  5745. %@AB@%FLDLN2%@BO:     6030b@%                         FXTRACT%@BO:     69a17@%%@AE@%%@NL@%
  5746. %@AB@%FLDPI%@BO:     6030b@%%@AE@%%@NL@%
  5747. %@AB@%FLDZ%@BO:     6030b@%%@AE@%%@NL@%
  5748. %@NL@%
  5749. %@AU@%Transcendental%@AE@%                  %@AU@%Processor Control%@AE@%%@NL@%
  5750. %@AB@%FPTAN%@BO:     63799@%                          FINIT/FNINIT%@BO:     5f85c@%%@AE@%%@NL@%
  5751. %@AB@%FPATAN%@BO:     62760@%                         FFREE%@BO:     5ef1d@%%@AE@%%@NL@%
  5752. %@AB@%FSIN%@BO:     64e2d@%%@AE@% (80387 only)              %@AB@%FNOP%@BO:     624f6@%%@AE@%%@NL@%
  5753. %@AB@%FCOS%@BO:     5d078@%%@AE@% (80387 only)              %@AB@%FWAIT%@BO:     68c94@%%@AE@%%@NL@%
  5754. %@AB@%FSINCOS%@BO:     6521b@%%@AE@% (80387 only)           %@AB@%FDECSTP%@BO:     5d466@%%@AE@%%@NL@%
  5755. %@AB@%F2XM1%@BO:     5ad80@%                          FINCSTP%@BO:     5f557@%%@AE@%%@NL@%
  5756. %@AB@%FYL2X%@BO:     69d04@%                          FCLEX/FNCLEX%@BO:     5bf74@%%@AE@%%@NL@%
  5757. %@AB@%FYL2XP1%@BO:     69fec@%                        FSETPM%@BO:     64ab3@%%@AE@% (80287 only)%@NL@%
  5758. %@AB@%FPREM%@BO:     62ad7@%                          FDISI/FNDISI%@BO:     5d76b@%%@AE@% (8087 only)%@NL@%
  5759. %@AB@%FPREM1%@BO:     6323a@%%@AE@% (80387 only)            %@AB@%FENI/FNENI%@BO:     5ebd2@%%@AE@% (8087 only)%@NL@%
  5760.                                 %@AB@%FSAVE/FNSAVE%@BO:     6421a@%%@AE@%%@NL@%
  5761. %@AU@%Compare%@AE@%                         %@AB@%FLDCW%@BO:     60dd8@%%@AE@%%@NL@%
  5762. %@AB@%FCOM/FICOM%@BO:     5c29e@%                     FRSTOR%@BO:     63e86@%%@AE@%%@NL@%
  5763. %@AB@%FCOMP/FICOMP%@BO:     5c29e@%                   FSTCW/FNSTCW%@BO:     663dd@%%@AE@%%@NL@%
  5764. %@AB@%FCOMPP%@BO:     5c29e@%                         FSTSW/FNSTSW%@BO:     66a35@%%@AE@%%@NL@%
  5765. %@AB@%FUCOM%@BO:     683fe@%%@AE@% (80387 only)             %@AB@%FSTENV/FNSTENV%@BO:     66697@%%@AE@%%@NL@%
  5766. %@AB@%FUCOMP%@BO:     683fe@%%@AE@% (80387 only)%@NL@%
  5767. %@AB@%FUCOMPP%@BO:     683fe@%%@AE@% (80387 only)%@NL@%
  5768. %@AB@%FTST%@BO:     67fd0@%%@AE@%%@NL@%
  5769. %@AB@%FXAM%@BO:     68f3a@%%@AE@%%@NL@%
  5770. %@AB@%FSTSW/FNSTSW%@BO:     66a35@%%@AE@%%@NL@%
  5771. %@NL@%
  5772. %@NL@%
  5773. %@CR:115       @%%@NL@%
  5774. %@2@%%@AB@%Interpreting Coprocessor Instructions%@CR:Coproc1   @%%@AE@%%@EH@%%@NL@%
  5775. ───────────────────────────────────────────────────────────────────────────%@NL@%
  5776. %@NL@%
  5777. %@4@%This section provides an alphabetical reference to instructions of the%@EH@%
  5778. 8087, 80287, and 80387 coprocessors. The format is the same as for the
  5779. processor instructions except that encodings are not provided.
  5780. Differences are noted below.%@NL@%
  5781. %@NL@%
  5782. %@NL@%
  5783. %@3@%%@AB@%Syntax%@CR:Coproc1.1 @%%@AE@%%@EH@%%@QR:coprocessor syntax@%%@NL@%
  5784. %@NL@%
  5785. %@4@%Syntaxes in Column 1 use the following abbreviations for operand types:%@EH@%%@NL@%
  5786. %@NL@%
  5787. %@AI@%reg%@AE@%       A coprocessor stack register%@NL@%
  5788. %@NL@%
  5789. %@AI@%memreal%@AE@%   A direct or indirect memory operand where a real number
  5790.           is stored%@NL@%
  5791. %@NL@%
  5792. %@AI@%memint%@AE@%    A direct or indirect memory operand where a binary integer
  5793.           is stored%@NL@%
  5794. %@NL@%
  5795. %@AI@%membcd%@AE@%    A direct or indirect memory operand where a BCD number
  5796.           is stored%@NL@%
  5797. %@NL@%
  5798. %@NL@%
  5799. %@3@%%@AB@%Examples%@CR:Coproc1.2 @%%@AE@%%@EH@%%@NL@%
  5800. %@NL@%
  5801. %@4@%The examples in Column 2 are randomly chosen, and no significance should%@EH@%
  5802. be attached to their order or placement. They are valid examples of the
  5803. associated syntax, but there is no attempt to illustrate all possible
  5804. operand combinations or to show context. Their position is not related
  5805. to the clock speeds in Column 3.%@NL@%
  5806. %@NL@%
  5807. %@NL@%
  5808. %@3@%%@AB@%Clock Speeds%@CR:Coproc1.3 @%%@AE@%%@EH@%%@QR:clock speeds@%%@QR:clock speed@%%@QR:coprocessor clock speeds@%%@QR:coprocessor clock speed@%%@NL@%
  5809. %@NL@%
  5810. %@4@%Column 3 shows the clock speeds for each processor. Sometimes an%@EH@%
  5811. instruction may have more than one possible clock speed. The following
  5812. abbreviations are used to specify variations:%@NL@%
  5813. %@NL@%
  5814. EA        %@AU@%Effective address.%@AE@% This applies only to the 8087. See the 
  5815.           Processor Section, "Timings on the 8080 and 8086 Processors,"%@BO:     156ab@%
  5816.           for an explanation of effective address timings.%@NL@%
  5817. %@NL@%
  5818. s,l,t     %@AU@%Short real, long real, and 10-byte temporary real.%@AE@%%@NL@%
  5819. %@NL@%
  5820. w,d,q     %@AU@%Word, doubleword, and quadword binary integer.%@AE@%%@NL@%
  5821. %@NL@%
  5822. t,f       %@AU@%To or from stack top.%@AE@% On the 80387, the t clocks represent
  5823.           timings when %@AB@%ST%@AE@% is the destination. The f clocks represent
  5824.           timings when %@AB@%ST%@AE@% is the source.%@NL@%
  5825. %@NL@%
  5826. %@CR:116       @%%@NL@%
  5827. %@3@%%@AB@%Instruction Size%@CR:Coproc1.4 @%%@AE@%%@EH@%%@QR:instruction size@%%@QR:coprocessor instruction size@%%@NL@%
  5828. %@NL@%
  5829. %@4@%The instruction size is always two bytes for instructions that do not%@EH@%
  5830. access memory. For instructions that do access memory, the size is four
  5831. bytes on the 8087 and 80287. On the 80387, the size for instructions
  5832. that access memory is four bytes in 16-bit mode or six bytes in
  5833. 32-bit mode.%@NL@%
  5834. %@NL@%
  5835. %@4@%On the 8087, each instruction must be preceded by the %@AB@%WAIT%@AE@% (also called%@EH@%
  5836. %@AB@%FWAIT%@AE@%) instruction, thereby increasing the instruction's size by one
  5837. byte. %@AB@%MASM%@AE@% inserts %@AB@%WAIT%@AE@% automatically by default, or with the
  5838. %@AB@%.8087%@AE@% directive.%@NL@%
  5839. %@NL@%
  5840. %@NL@%
  5841. %@2@%%@AB@%Architecture%@CR:Coproc2   @%%@AE@%%@EH@%%@QR:architecture@%%@QR:coprocessor architecture@%%@NL@%
  5842. ───────────────────────────────────────────────────────────────────────────%@NL@%
  5843. %@NL@%
  5844. %@4@%The 8087, 80287, and 80387 coprocessors have several elements of%@EH@%
  5845. architecture in common. All have a register stack made up of eight
  5846. 80-bit data registers. These can contain floating-point numbers in the
  5847. temporary real format. The coprocessors also have 14 bytes of control
  5848. registers. The format of registers is shown in Figure 2%@BO:     5a11c@%.%@NL@%
  5849. %@NL@%
  5850. %@QR:coprocessor registers@%%@NL@%
  5851. %@AB@%Data Register Stack%@AE@%%@QR:data register stack@%%@QR:data register@%%@NL@%
  5852.         79          63                                              0%@NL@%
  5853.        ┌═/═════════/════════════════════════════════════════════════╗%@NL@%
  5854. ST     │ │         │                                                ║%@NL@%
  5855.        ├─┼─────────┼────────────────────────────────────────────────╢%@NL@%
  5856. ST(1)  │ │         │                                                ║%@NL@%
  5857.        ├─┼─────────┼────────────────────────────────────────────────╢%@NL@%
  5858. ST(2)  │ │         │                                                ║%@NL@%
  5859.        ├─┼─────────┼────────────────────────────────────────────────╢%@NL@%
  5860. ST(3)  │ │         │                                                ║%@NL@%
  5861.        ├─┼─────────┼────────────────────────────────────────────────╢%@NL@%
  5862. ST(4)  │ │         │                                                ║%@NL@%
  5863.        ├─┼─────────┼────────────────────────────────────────────────╢%@NL@%
  5864. ST(5)  │ │         │                                                ║%@NL@%
  5865.        ├─┼─────────┼────────────────────────────────────────────────╢%@NL@%
  5866. ST(6)  │ │         │                                                ║%@NL@%
  5867.        ├─┼─────────┼────────────────────────────────────────────────╢%@NL@%
  5868. ST(7)  │ │         │                                                ║%@NL@%
  5869.        └─┴─────────┴────────────────────────────────────────────────╜%@NL@%
  5870.         ▒  ▒▒▒▒▒▒▒▒ ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒%@NL@%
  5871.         │     │                           │%@NL@%
  5872.       %@AI@%Sign%@AE@%    │                        %@AI@%Mantissa%@AE@%%@NL@%
  5873.            %@AI@%Exponent%@AE@%%@NL@%
  5874. %@NL@%
  5875. %@AB@%Control Registers%@AE@%%@NL@%
  5876.                                           0%@NL@%
  5877.                     ┌─════════════════════╗%@NL@%
  5878.        Control word │                     ║%@NL@%
  5879.                     ├─────────────────────╢%@NL@%
  5880.         Status word │                     ║%@NL@%
  5881.                     ├─────────────────────╢%@NL@%
  5882.            Tag word │                     ║%@NL@%
  5883.                     ├─────────────────────╢%@NL@%
  5884.                     │                     ║%@NL@%
  5885.                     ├─────────────────────╢%@NL@%
  5886.                     │                     ║%@NL@%
  5887. Instruction pointer ├─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─╢%@NL@%
  5888.                     │                     ║%@NL@%
  5889.                     ├─────────────────────╢%@NL@%
  5890.                     │                     ║%@NL@%
  5891.     Operand pointer ├─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─╢%@NL@%
  5892.                     │                     ║%@NL@%
  5893.                     └─────────────────────╜%@NL@%
  5894. %@NL@%
  5895. %@AB@%Figure 2%@CR:f2        @%  Coprocessor Registers%@AE@%%@NL@%
  5896. %@NL@%
  5897. %@CR:117       @%%@NL@%
  5898. %@4@%The most important control registers are the control word and the status%@EH@%
  5899. word. The format of these registers is shown in Figure 3%@BO:     5acff@%.%@NL@%
  5900. %@NL@%
  5901. %@NL@%
  5902. %@AB@%Control Word%@AE@%%@QR:control word@%%@NL@%
  5903.  15                        7                                       0%@NL@%
  5904. ┌─══════╤════╤═════╤══════╤════╤════╤════╤════╤════╤════╤════╤════╗%@NL@%
  5905. │ X X X │IC%@FN@%
  5906. %@FC@%1. 8087 and 80287 only; 80387 uses affine regardless of setting
  5907. %@FC@%2. 8087 only; undefined on 80287 and 80387%@EF@%1│  RC │  PC  │IE%@FN@%
  5908. %@FC@%1. 8087 and 80287 only; 80387 uses affine regardless of setting
  5909. %@FC@%2. 8087 only; undefined on 80287 and 80387%@EF@%2│    │ PM │ UM │ OM │ ZM │ DM │ IM ║%@NL@%
  5910. └───────┴────┴─────┴──────┴────┴────┴────┴────┴────┴────┴────┴────╜%@NL@%
  5911. %@NL@%
  5912. %@NL@%
  5913. %@AB@%Status Word%@AE@%%@QR:status word@%%@NL@%
  5914.  15                              7                                       0%@NL@%
  5915. ┌─═══╤════╤═══════╤════╤════╤════╤════╤════╤════╤════╤════╤════╤════╤═════╗%@NL@%
  5916. │ B  │ C3 │  ST   │ C2 │ C1 │ C0 │ES%@FN@%
  5917. %@FC@%3. IR - Interrupt Request on 8087
  5918. %@FC@%4. 80387 only; undefined on 8087 and 80287%@EF@%3│SF%@FN@%
  5919. %@FC@%3. IR - Interrupt Request on 8087
  5920. %@FC@%4. 80387 only; undefined on 8087 and 80287%@EF@%4│ PE │ UE │ OE │ ZE │ DE │ IE  ║%@NL@%
  5921. └────┴────┴───────┴────┴────┴────┴────┴────┴────┴────┴────┴────┴────┴─────╨%@NL@%
  5922. %@NL@%
  5923. %@NL@%
  5924. Abbreviations for Fields in Control Word and Status Word%@NL@%
  5925. %@NL@%
  5926. %@AU@%IC - Infinity Control%@AE@%                      %@AU@%Exception Masks and Flags %@AE@%%@NL@%
  5927. 0 = Projective (default on 8087 ir 80287)  PM/PE - Precision %@NL@%
  5928. 1 = Affine                                 UM/UE - Underflow %@NL@%
  5929.                                            OM/OE - Overflow %@NL@%
  5930. %@AU@%RC - Rounding Control%@AE@%                      ZM/ZE - Zero Divide %@NL@%
  5931. 00 = Round to nearest or even (default)    DM/DE - Denormalized Operand %@NL@%
  5932. 01 = Round dow toward -infinity            IM/IE - Invalid Operation%@NL@%
  5933. 10 = Round up toward +infinity             For masks, %@NL@%
  5934. 11 = Chop by truncating toward 0            1 = masked; 0 = unmasked %@NL@%
  5935.                                            For exceptions, %@NL@%
  5936. %@AU@%PC - Precision Control%@AE@%                      1 = exception; 0 = no exception %@NL@%
  5937. 00 = 24-bit mantissa %@NL@%
  5938. 10 = 53-bit mantissa                       %@AU@%B - Busy %@AE@%%@NL@%
  5939. 11 = 64-bit mantissa (default)             (1 = exception control unit
  5940.                                                 active)%@NL@%
  5941. %@NL@%
  5942. %@AU@%IE - Interrupt Enable Mask%@AE@%                 C3 ▒%@NL@%
  5943.                                            C2 ▒ %@AU@%Condition Codes%@AE@%%@NL@%
  5944. %@AU@%SF - Stack Flag%@AE@%                            C1 ▒%@NL@%
  5945.                                            C0 ▒%@NL@%
  5946. %@AU@%ST - Stack Top Pointer %@AE@%%@NL@%
  5947.                                            %@AU@%ES - Error Summary%@AE@% (80287-387)%@NL@%
  5948. %@NL@%
  5949. %@AB@%Figure 3%@CR:f3        @%  Control Word and Status Word%@AE@%%@NL@%
  5950. %@CR:118       @%%@NL@%
  5951. %@NL@%
  5952. %@CR:119       @%%@NL@%
  5953. %@2@%%@AB@%F2XM1%@AE@%%@CR:F2XM1     @%%@EH@%%@QR:f2xm1@%%@NL@%
  5954. %@AB@%2(^X)-1%@AE@%%@NL@%
  5955. %@NL@%
  5956. %@4@%Calculates Y = 2(^X) - 1. X is taken from %@AB@%ST%@AE@%. The result, Y, %@EH@%
  5957. is returned in %@AB@%ST%@AE@%. X must be in the range 0 ≤ X ≤ 0.5 on the
  5958. 8087 and 80287, or in the range -1.0 ≤ X ≤ +1.0 on the 80387.%@NL@%
  5959. %@NL@%
  5960. ─────────────────┬────────────────────────┬────────────────────────────────%@NL@%
  5961.                  │ f2xm1                  │  87   310-630%@NL@%
  5962. %@AB@%F2XM1%@AE@%            │                        │ 287   310-630%@NL@%
  5963.                  │                        │ 387   211-476%@NL@%
  5964. ─────────────────┴────────────────────────┴────────────────────────────────%@NL@%
  5965. %@NL@%
  5966. %@NL@%
  5967. %@NL@%
  5968. %@2@%%@AB@%Instructions%@CR:Coproc3   @%%@AE@%%@EH@%%@NL@%
  5969. ───────────────────────────────────────────────────────────────────────────%@NL@%
  5970. %@NL@%
  5971. %@NL@%
  5972. %@NL@%
  5973. %@3@%%@AB@%FABS%@CR:FABS      @%%@AE@%%@EH@%%@QR:fabs@%%@NL@%
  5974. %@AB@%Absolute Value%@AE@%%@QR:absolute value@%%@NL@%
  5975. %@NL@%
  5976. %@4@%Converts the element in %@AB@%ST%@AE@% to its absolute value.%@EH@%%@NL@%
  5977. %@NL@%
  5978. ─────────────────┬────────────────────────┬────────────────────────────────%@NL@%
  5979.                  │ fabs                   │  87   10-17%@NL@%
  5980. %@AB@%FABS%@AE@%             │                        │ 287   10-17%@NL@%
  5981.                  │                        │ 387   22%@NL@%
  5982. ─────────────────┴────────────────────────┴────────────────────────────────%@NL@%
  5983. %@NL@%
  5984. %@NL@%
  5985. %@CR:120       @%%@NL@%
  5986. %@3@%%@AB@%FADD/FADDP/FIADD%@CR:FADD      @%%@AE@%%@EH@%%@QR:fadd@%%@QR:faddp@%%@QR:fiadd@%%@NL@%
  5987. %@AB@%Add%@AE@%%@QR:add@%%@NL@%
  5988. %@NL@%
  5989. %@4@%Adds the source to the destination and returns the sum in%@EH@%
  5990. the destination. If two register operands are specified,
  5991. one must be %@AB@%ST%@AE@%. If a memory operand is specified, the sum 
  5992. replaces the value in %@AB@%ST%@AE@%. Memory operands can be 32- or 64-
  5993. bit real numbers or 16- or 32-bit integers. If no operand
  5994. is specified, %@AB@%ST%@AE@% is added to %@AB@%ST(1)%@AE@% and the stack is popped, 
  5995. returning the sum in %@AB@%ST%@AE@%. For %@AB@%FADDP%@AE@%, the source must be %@AB@%ST%@AE@%; 
  5996. the sum is returned in the destination and %@AB@%ST%@AE@% is popped.%@NL@%
  5997. %@NL@%
  5998. ────────────────┬─────────────────────────┬────────────────────────────────%@NL@%
  5999.                 │ fadd   st,st(2)         │  87   70-100%@NL@%
  6000. %@AB@%FADD%@AE@%  «%@AI@%reg%@AE@%,%@AI@%reg%@AE@%» │ fadd   st(5),st         │ 287   70-100%@NL@%
  6001.                 │ fadd                    │ 387   t=23-31,f=26-34%@NL@%
  6002. ────────────────┼─────────────────────────┼────────────────────────────────%@NL@%
  6003.                 │ faddp  st(6),st         │  87   75-105%@NL@%
  6004. %@AB@%FADDP  %@AI@%reg%@AE@%,%@AB@%ST%@AE@%   │                         │ 287   75-105%@NL@%
  6005.                 │                         │ 387   23-31%@NL@%
  6006. ────────────────┼─────────────────────────┼────────────────────────────────%@NL@%
  6007.                 │ fadd   QWORD PTR [bx]   │  87   (s=90-120,s=95 125)+EA%@NL@%
  6008. %@AB@%FADD  %@AI@%memreal%@AE@%   │ fadd   shortreal        │ 287   s=90-120,l=95-125%@NL@%
  6009.                 │                         │ 387   s=24-32,l=29-37%@NL@%
  6010. ────────────────┼─────────────────────────┼────────────────────────────────%@NL@%
  6011.                 │ fiadd  int16            │  87   (w=102-137,d=108-143)+EA%@NL@%
  6012. %@AB@%FIADD  %@AI@%memint%@AE@%   │ fiadd  warray[di]       │ 287   w=102-137,d=108-143%@NL@%
  6013.                 │ fiadd  double           │ 387   w=71-85,d=57-72%@NL@%
  6014. ────────────────┴─────────────────────────┴────────────────────────────────%@NL@%
  6015. %@NL@%
  6016. %@NL@%
  6017. %@NL@%
  6018. %@3@%%@AB@%FBLD%@CR:FBLD      @%%@AE@%%@EH@%%@QR:fbld@%%@NL@%
  6019. %@AB@%Load BCD%@AE@%%@QR:load bcd@%%@NL@%
  6020. %@NL@%
  6021. %@4@%See %@AB@%FLD%@AE@%%@BO:     5fc99@%.%@EH@%%@NL@%
  6022. %@NL@%
  6023. %@NL@%
  6024. %@NL@%
  6025. %@3@%%@AB@%FBSTP%@CR:FBSTP     @%%@AE@%%@EH@%%@QR:fbstp@%%@NL@%
  6026. %@AB@%Store BCD and Pop%@AE@%%@QR:store bcd and pop@%%@QR:pop bcd@%%@QR:bcd@%%@NL@%
  6027. %@NL@%
  6028. %@4@%See %@AB@%FST%@AE@%%@BO:     6590f@%.%@EH@%%@NL@%
  6029. %@NL@%
  6030. %@NL@%
  6031. %@CR:121       @%%@NL@%
  6032. %@3@%%@AB@%FCHS%@CR:FCHS      @%%@AE@%%@EH@%%@QR:fchs@%%@NL@%
  6033. %@AB@%Change Sign%@AE@%%@QR:change sign@%%@NL@%
  6034. %@NL@%
  6035. %@4@%Reverses the sign of the value in %@AB@%ST%@AE@%.%@EH@%%@NL@%
  6036. %@NL@%
  6037. ─────────────────┬────────────────────────┬────────────────────────────────%@NL@%
  6038.                  │ fchs                   │  87   10-17%@NL@%
  6039. %@AB@%FCHS%@AE@%             │                        │ 287   10-17%@NL@%
  6040.                  │                        │ 387   24-25%@NL@%
  6041. ─────────────────┴────────────────────────┴────────────────────────────────%@NL@%
  6042. %@NL@%
  6043. %@NL@%
  6044. %@NL@%
  6045. %@3@%%@AB@%FCLEX/FNCLEX%@CR:FCLEX     @%%@AE@%%@EH@%%@QR:fclex@%%@QR:fnclex@%%@NL@%
  6046. %@AB@%Clear Exceptions%@AE@%%@QR:clear@%%@QR:clear exceptions@%%@NL@%
  6047. %@NL@%
  6048. %@4@%Clears all exception flags, the busy flag and bit 7 in the%@EH@% 
  6049. status word. Bit 7 is the interrupt request flag on the 8087 
  6050. and the error status flag on the 80287 and 80387. The 
  6051. instruction has wait and no-wait versions.%@NL@%
  6052. %@NL@%
  6053. ─────────────────┬────────────────────────┬────────────────────────────────%@NL@%
  6054. %@AB@%FCLEX%@AE@%            │ fclex                  │  87   2-8%@NL@%
  6055. %@AB@%FNCLEX%@AE@%           │                        │ 287   2-8%@NL@%
  6056.                  │                        │ 387   11%@NL@%
  6057. ─────────────────┴────────────────────────┴────────────────────────────────%@NL@%
  6058. %@NL@%
  6059. %@NL@%
  6060. %@CR:122       @%%@NL@%
  6061. %@3@%%@AB@%FCOM/FCOMP/FCOMPP/FICOM/FICOMP%@CR:FCOM      @%%@AE@%%@EH@%%@QR:fcom@%%@QR:fcomp@%%@QR:fcompp@%%@QR:ficom@%%@QR:ficomp@%%@NL@%
  6062. %@AB@%Compare%@AE@%%@QR:compare@%%@NL@%
  6063. %@NL@%
  6064. %@4@%Compares the specified source to %@AB@%ST%@AE@% and sets the condition%@EH@% 
  6065. codes of the status word according to the result. The 
  6066. instruction works by subtracting the source operand from
  6067. %@AB@%ST%@AE@% without changing either operand. Memory operands can be
  6068. 32- or 64-bit real numbers or 16- or 32-bit integers. If no 
  6069. operand is specified or if two pops are specified, %@AB@%ST%@AE@% is 
  6070. compared to %@AB@%ST(1)%@AE@% and the stack is popped. If one pop is 
  6071. specified with an operand, the operand is compared to %@AB@%ST%@AE@%. If 
  6072. one of the operands is a NAN, an invalid-operation exception 
  6073. is generated (see %@AB@%FUCOM%@AE@%%@BO:     683fe@% for an alternative method of 
  6074. comparing on the 80387).%@NL@%
  6075. %@NL@%
  6076. ────────────────┬─────────────────────────┬────────────────────────────────%@NL@%
  6077.                 │ fcom   st(2)            │  87   40-50%@NL@%
  6078. %@AB@%FCOM%@AE@%  «%@AI@%reg%@AE@%»     │ fcom                    │ 287   40-50%@NL@%
  6079.                 │                         │ 387   24%@NL@%
  6080. ────────────────┼─────────────────────────┼────────────────────────────────%@NL@%
  6081.                 │ fcomp  st(7)            │  87   42-52%@NL@%
  6082. %@AB@%FCOMP%@AE@%  «%@AI@%reg%@AE@%»    │ fcomp                   │ 287   42-52%@NL@%
  6083.                 │                         │ 387   26%@NL@%
  6084. ────────────────┼─────────────────────────┼────────────────────────────────%@NL@%
  6085.                 │ fcomp p                 │  87   45-55%@NL@%
  6086. %@AB@%FCOMPP%@AE@%          │                         │ 287   45-55%@NL@%
  6087.                 │                         │ 387   26%@NL@%
  6088. ────────────────┼─────────────────────────┼────────────────────────────────%@NL@%
  6089.                 │ fcom   shortreals[di]   │  87   (s=60-70,l=65-75)+EA%@NL@%
  6090. %@AB@%FCOM  %@AI@%memreal%@AE@%   │ fcom   longreal         │ 287   s=60-70,l=65-75%@NL@%
  6091.                 │                         │ 387   s=26,l=31%@NL@%
  6092. ────────────────┼─────────────────────────┼────────────────────────────────%@NL@%
  6093.                 │ fcomp  longreal         │  87   (s=63-73,l=67-77)+EA%@NL@%
  6094. %@AB@%FCOMP  %@AI@%memreal%@AE@%  │ fcomp  shorts[di]       │ 287   s=63-73,l=67-77%@NL@%
  6095.                 │                         │ 387   s=26,l=31%@NL@%
  6096. ────────────────┼─────────────────────────┼────────────────────────────────%@NL@%
  6097.                 │ ficom  double           │  87   (w=72-86,d=78-91)+EA%@NL@%
  6098. %@AB@%FICOM  %@AI@%memint%@AE@%   │ ficom  warray[di]       │ 287   w=72-86,d=78-91%@NL@%
  6099.                 │                         │ 387   w=71-75,d=56-63%@NL@%
  6100. ────────────────┼─────────────────────────┼────────────────────────────────%@NL@%
  6101.                 │ ficomp WORD PTR [bp+6]  │  87   (w=74-88,d=80-93)+EA%@NL@%
  6102. %@AB@%FICOMP  %@AI@%memint%@AE@%  │ ficomp darray[di]       │ 287   w=74-88,d=80-93%@NL@%
  6103.                 │                         │ 387   w=71-75,d=56-63%@NL@%
  6104. ────────────────┴─────────────────────────┴────────────────────────────────%@NL@%
  6105. %@NL@%
  6106. %@AB@%Condition Codes for FCOM%@AE@%%@NL@%
  6107. %@NL@%
  6108. %@AU@%C3%@AE@%    %@AU@%C2%@AE@%    %@AU@%C1%@AE@%    %@AU@%C0%@AE@%    %@AU@%Meaning%@AE@%%@NL@%
  6109. 0     0     ?     0     %@AB@%ST%@AE@% > source%@NL@%
  6110. 0     0     ?     1     %@AB@%ST%@AE@% < source%@NL@%
  6111. 1     0     ?     0     %@AB@%ST%@AE@% = source%@NL@%
  6112. 1     1     ?     1     %@AB@%ST%@AE@% is not comparable to source%@NL@%
  6113. %@NL@%
  6114. %@NL@%
  6115. %@CR:123       @%%@NL@%
  6116. %@3@%%@AB@%FCOS%@CR:FCOS      @%%@AE@%%@EH@%%@QR:fcos@%%@NL@%
  6117. %@AB@%Cosine%@AE@%%@QR:cosine@%%@NL@%
  6118. %@AB@%80387 Only%@AE@%%@NL@%
  6119. %@NL@%
  6120. %@4@%Replaces a value in radians in %@AB@%ST%@AE@% with its cosine. If %@AB@%ST%@AE@% is%@EH@%
  6121. in the range |%@AB@%ST%@AE@%| < 2^63, the C2 bit of the status word is 
  6122. cleared and the cosine is calculated. Otherwise, C2 is set 
  6123. and no calculation is done. %@AB@%ST%@AE@% can be reduced to the 
  6124. required range with %@AB@%FPREM%@AE@% or %@AB@%FPREM1%@AE@%.%@NL@%
  6125. %@NL@%
  6126. ────────────────┬─────────────────────────┬────────────────────────────────%@NL@%
  6127.                 │ fcos                    │  87   ─%@NL@%
  6128. %@AB@%FCOS%@AE@%            │                         │ 287   ─%@NL@%
  6129.                 │                         │ 387   123-772%@FN@%
  6130. %@FC@%1. For operands with an absolute value greater than π/4,
  6131. %@FC@%up to 76 additional clocks may be required.%@EF@%1%@NL@%
  6132. ────────────────┴─────────────────────────┴────────────────────────────────%@NL@%
  6133. %@NL@%
  6134. %@NL@%
  6135. %@NL@%
  6136. %@3@%%@AB@%FDECSTP%@CR:FDECSTP   @%%@AE@%%@EH@%%@QR:fdecstp@%%@NL@%
  6137. %@AB@%Decrement Stack Pointer%@AE@%%@QR:decrement stack pointer@%%@QR:stack pointer@%%@QR:decrement pointer@%%@NL@%
  6138. %@NL@%
  6139. %@4@%Decrements the stack top pointer in the status word. No tags%@EH@%
  6140. or registers are changed and no data are transferred. If the 
  6141. stack pointer is 0, %@AB@%FDECSTP%@AE@% changes it to 7.%@NL@%
  6142. %@NL@%
  6143. ────────────────┬─────────────────────────┬────────────────────────────────%@NL@%
  6144.                 │ fdecstp                 │  87   6-12%@NL@%
  6145. %@AB@%FDECSTP%@AE@%         │                         │ 287   6-12%@NL@%
  6146.                 │                         │ 387   22%@NL@%
  6147. ────────────────┴─────────────────────────┴────────────────────────────────%@NL@%
  6148. %@NL@%
  6149. %@NL@%
  6150. %@NL@%
  6151. %@3@%%@AB@%FDISI/FNDISI%@CR:FDISI     @%%@AE@%%@EH@%%@QR:fdisi@%%@QR:fndisi@%%@NL@%
  6152. %@AB@%Disable Interrupts%@AE@%%@QR:disable interrupts@%%@QR:disable interrupt@%%@NL@%
  6153. %@AB@%8087 Only1%@AE@%%@NL@%
  6154. %@NL@%
  6155. %@4@%Disables interrupts by setting the interrupt enable mask%@EH@% 
  6156. in the control word. This instruction has wait and no-wait 
  6157. versions. Since the 80287 and 80387 do not have an interrupt 
  6158. enable mask, the instruction is recognized but ignored on 
  6159. these coprocessors.%@NL@%
  6160. %@NL@%
  6161. ────────────────┬─────────────────────────┬────────────────────────────────%@NL@%
  6162. %@AB@%FDISI%@AE@%           │ fdisi                   │  87   2-8%@NL@%
  6163. %@AB@%FNDISI%@AE@%          │                         │ 287   2%@NL@%
  6164.                 │                         │ 387   2%@NL@%
  6165. ────────────────┴─────────────────────────┴────────────────────────────────%@NL@%
  6166. %@NL@%
  6167. %@NL@%
  6168. %@CR:124       @%%@NL@%
  6169. %@3@%%@AB@%FDIV/FDIVP/FIDIV%@CR:FDIV      @%%@AE@%%@EH@%%@QR:fdiv@%%@QR:fdivp@%%@QR:fidiv@%%@NL@%
  6170. %@AB@%Divide%@AE@%%@QR:divide@%%@NL@%
  6171. %@NL@%
  6172. %@4@%Divides the destination by the source, and returns the%@EH@% 
  6173. quotient in the destination. If two register operands are 
  6174. specified, one must be %@AB@%ST%@AE@%. If a memory operand is specified, 
  6175. the quotient replaces the value in %@AB@%ST%@AE@%. Memory operands can 
  6176. be 32- or 64-bit real numbers or 16- or 32-bit integers. If 
  6177. no operand is specified, %@AB@%ST%@AE@% is divided by %@AB@%ST(1)%@AE@% and the 
  6178. stack is popped, returning the result in %@AB@%ST%@AE@%. For %@AB@%FDIVP%@AE@%,
  6179. the source must be %@AB@%ST%@AE@%; the quotient is returned in the 
  6180. destination register and %@AB@%ST%@AE@% is popped.%@NL@%
  6181.  %@NL@%
  6182. ────────────────┬─────────────────────────┬────────────────────────────────%@NL@%
  6183.                 │ fdiv   st,st(2)         │  87   193-203%@NL@%
  6184. %@AB@%FDIV%@AE@%  «%@AI@%reg%@AE@%,%@AI@%reg%@AE@%» │ fdiv   st(5),st         │ 287   193-203%@NL@%
  6185.                 │ fdiv                    │ 387   t=88,f=91%@NL@%
  6186. ────────────────┼─────────────────────────┼────────────────────────────────%@NL@%
  6187.                 │ fdivp  st(6),st         │  87   197-207%@NL@%
  6188. %@AB@%FDIVP  %@AI@%reg%@AE@%,%@AB@%ST%@AE@%   │                         │ 287   197-207%@NL@%
  6189.                 │                         │ 387   91%@NL@%
  6190. ────────────────┼─────────────────────────┼────────────────────────────────%@NL@%
  6191.                 │ fdiv   DWORD PTR [bx]   │  87   (s=215-225,l=220-230)+EA%@NL@%
  6192. %@AB@%FDIV  %@AI@%memreal%@AE@%   │ fdiv   shortreal[di]    │ 287   s=215-225,l=220-230%@NL@%
  6193.                 │ fdiv   longreal         │ 387   s=89,l=94%@NL@%
  6194. ────────────────┼─────────────────────────┼────────────────────────────────%@NL@%
  6195.                 │ fidiv  int16            │  87   (w=224-238,d=230-243)+EA%@NL@%
  6196. %@AB@%FIDIV  %@AI@%memint%@AE@%   │ fidiv  warray[di]       │ 287   w=224-238,d=230-243%@NL@%
  6197.                 │ fidiv  double           │ 387   w=136-140,d=120-127%@NL@%
  6198. ────────────────┴─────────────────────────┴────────────────────────────────%@NL@%
  6199. %@NL@%
  6200. %@NL@%
  6201. %@NL@%
  6202. %@3@%%@AB@%FDIVR/FDIVRP/FIDIVR%@CR:FDIVR     @%%@AE@%%@EH@%%@QR:fdivr@%%@QR:fdivrp@%%@QR:fidivr@%%@NL@%
  6203. %@AB@%Divide Reversed%@AE@%%@QR:divide reversed@%%@QR:divide@%%@NL@%
  6204. %@NL@%
  6205. %@4@%Divides the source by the destination and returns the%@EH@% 
  6206. quotient in the destination. If two register operands are 
  6207. specified, one must be %@AB@%ST%@AE@%. If a memory operand is specified, 
  6208. the quotient replaces the value in %@AB@%ST%@AE@%. Memory operands can 
  6209. be 32- or 64-bit real numbers or 16- or 32-bit integers.
  6210. If no operand is specified, %@AB@%ST%@AE@% is divided by %@AB@%ST(1)%@AE@% and the 
  6211. stack is popped, returning the result in %@AB@%ST%@AE@%. For %@AB@%FDIVRP%@AE@%,
  6212. the source must be %@AB@%ST%@AE@%; the quotient is returned in the 
  6213. destination register and %@AB@%ST%@AE@% is popped.%@NL@%
  6214. %@NL@%
  6215. ────────────────┬─────────────────────────┬────────────────────────────────%@NL@%
  6216.                 │ fdivr  st,st(2)         │  87   194-204%@NL@%
  6217. %@AB@%FDIVR%@AE@%  «%@AI@%reg%@AE@%,%@AI@%reg%@AE@%»│ fdivr  st(5),st         │ 287   194-204%@NL@%
  6218.                 │ fdivr                   │ 387   t=88,f=91%@NL@%
  6219. ────────────────┼─────────────────────────┼────────────────────────────────%@NL@%
  6220.                 │ fdivrp st(6),st         │  87   198-208%@NL@%
  6221. %@AB@%FDIVRP  %@AI@%reg%@AE@%,%@AB@%ST%@AE@%  │                         │ 287   198-208%@NL@%
  6222.                 │                         │ 387   91%@NL@%
  6223. ────────────────┼─────────────────────────┼────────────────────────────────%@NL@%
  6224.                 │ fdivr  longreal         │  87   (s=216-226,l=221-231)+EA%@NL@%
  6225. %@AB@%FDIVR  %@AI@%memreal%@AE@%  │ fdivr  shortreal[di]    │ 287   s=216-226,l=221-231%@NL@%
  6226.                 │                         │ 387   s=89,l=94%@NL@%
  6227. ────────────────┼─────────────────────────┼────────────────────────────────%@NL@%
  6228.                 │ fidivr double           │  87   (w=225-239,d=231-245)+EA%@NL@%
  6229. %@AB@%FIDIVR  %@AI@%memint%@AE@%  │ fidivr warray[di]       │ 287   w=225-239,d=231-245%@NL@%
  6230.                 │                         │ 387   w=135-141,d=121-128%@NL@%
  6231. ────────────────┴─────────────────────────┴────────────────────────────────%@NL@%
  6232. %@NL@%
  6233. %@NL@%
  6234. %@CR:125       @%%@NL@%
  6235. %@3@%%@AB@%FENI/FNENI%@CR:FENI      @%%@AE@%%@EH@%%@QR:feni@%%@QR:fneni@%%@NL@%
  6236. %@AB@%Enable Interrupts%@AE@%%@QR:enable interrupts@%%@NL@%
  6237. %@AB@%8087 Only%@AE@%%@NL@%
  6238. %@NL@%
  6239. %@4@%Enables interrupts by clearing the interrupt enable mask%@EH@% 
  6240. in the control word. This instruction has wait and no-wait 
  6241. versions. Since the 80287 and 80387 do not have an interrupt 
  6242. enable mask, the instruction is recognized but ignored on 
  6243. these coprocessors.%@NL@%
  6244. %@NL@%
  6245. ────────────────┬─────────────────────────┬────────────────────────────────%@NL@%
  6246. %@AB@%FENI%@AE@%            │ feni                    │ 87    2-8%@NL@%
  6247. %@AB@%FNENI%@AE@%           │                         │ 287   2%@NL@%
  6248.                 │                         │ 387   2%@NL@%
  6249. ────────────────┴─────────────────────────┴────────────────────────────────%@NL@%
  6250. %@NL@%
  6251. %@NL@%
  6252. %@NL@%
  6253. %@3@%%@AB@%FFREE%@CR:FFREE     @%%@AE@%%@EH@%%@QR:ffree@%%@NL@%
  6254. %@AB@%Free Register%@AE@%%@QR:free register@%%@QR:free@%%@NL@%
  6255. %@NL@%
  6256. %@4@%Changes the specified register's tag to empty without changing%@EH@% 
  6257. the contents of the register.%@NL@%
  6258. %@NL@%
  6259. ────────────────┬─────────────────────────┬────────────────────────────────%@NL@%
  6260.                 │ ffree  st(3)            │  87   9-16%@NL@%
  6261. %@AB@%FFREE  ST(%@AI@%i%@AB@%)%@AE@%    │                         │ 287   9-16%@NL@%
  6262.                 │                         │ 387   18%@NL@%
  6263. ────────────────┴─────────────────────────┴────────────────────────────────%@NL@%
  6264. %@NL@%
  6265. %@NL@%
  6266. %@NL@%
  6267. %@3@%%@AB@%FIADD/FISUB/FISUBR/FIMUL/FIDIV/FIDIVR%@CR:FIADD     @%%@AE@%%@EH@%%@QR:fiadd@%%@QR:fisub@%%@QR:fisubr@%%@QR:fimul@%%@QR:fidiv@%%@QR:fidivr@%%@NL@%
  6268. %@AB@%Integer Arithmetic%@AE@%%@QR:integer arithmetic@%%@QR:integer@%%@QR:arithmetic@%%@NL@%
  6269. %@NL@%
  6270. %@4@%See %@AB@%FADD%@AE@%%@BO:     5b34f@%, %@AB@%FSUB%@AE@%%@BO:     66e7c@%, %@AB@%FSUBR%@AE@%%@BO:     67718@%, %@AB@%FMUL%@AE@%%@BO:     61435@%, %@AB@%FDIV%@AE@%%@BO:     5dae6@%, and %@AB@%FDIVR%@AE@%%@BO:     5e342@%.%@EH@%%@NL@%
  6271. %@NL@%
  6272. %@NL@%
  6273. %@NL@%
  6274. %@3@%%@AB@%FICOM/FICOMP%@CR:FICOM     @%%@AE@%%@EH@%%@QR:ficom@%%@QR:ficomp@%%@NL@%
  6275. %@AB@%Compare Integer%@AE@%%@QR:compare integer@%%@NL@%
  6276. %@NL@%
  6277. %@4@%See %@AB@%FCOM%@AE@%%@BO:     5c29e@%.%@EH@%%@NL@%
  6278. %@NL@%
  6279. %@NL@%
  6280. %@CR:126       @%%@NL@%
  6281. %@3@%%@AB@%FILD%@CR:FILD      @%%@AE@%%@EH@%%@QR:fild@%%@NL@%
  6282. %@AB@%Load Integer%@AE@%%@QR:load integer@%%@NL@%
  6283. %@NL@%
  6284. %@4@%See %@AB@%FLD%@AE@%%@BO:     5fc99@%.%@EH@%%@NL@%
  6285. %@NL@%
  6286. %@NL@%
  6287. %@NL@%
  6288. %@3@%%@AB@%FINCSTP%@CR:FINCSTP   @%%@AE@%%@EH@%%@QR:fincstp@%%@NL@%
  6289. %@AB@%Increment Stack Pointer%@AE@%%@QR:increment stack pointer@%%@QR:increment pointer@%%@QR:pointer@%%@NL@%
  6290. %@NL@%
  6291. %@4@%Increments the stack top pointer in the status word. No tags%@EH@% 
  6292. or registers are changed and no data are transferred. If the 
  6293. stack pointer is 7, then %@AB@%FINCSTP%@AE@% changes it to 0.%@NL@%
  6294. %@NL@%
  6295. ────────────────┬─────────────────────────┬────────────────────────────────%@NL@%
  6296.                 │ fincstp                 │  87   6-12%@NL@%
  6297. %@AB@%FINCSTP%@AE@%         │                         │ 287   6-12%@NL@%
  6298.                 │                         │ 387   21%@NL@%
  6299. ────────────────┴─────────────────────────┴────────────────────────────────%@NL@%
  6300. %@NL@%
  6301. %@NL@%
  6302. %@NL@%
  6303. %@3@%%@AB@%FINIT/FNINIT%@CR:FINIT     @%%@AE@%%@EH@%%@QR:finit@%%@QR:fninit@%%@NL@%
  6304. %@AB@%Initialize Coprocessor%@AE@%%@QR:initialize coprocessor@%%@QR:initialize@%%@QR:init@%%@NL@%
  6305. %@NL@%
  6306. %@4@%Initializes the coprocessor and resets all the registers and%@EH@% 
  6307. flags to their default values. The instruction has wait and 
  6308. no-wait versions. On the 80387, the condition codes of the 
  6309. status word are cleared. On the 8087 and 80287, they are 
  6310. unchanged.%@NL@%
  6311. %@NL@%
  6312. ────────────────┬─────────────────────────┬────────────────────────────────%@NL@%
  6313. %@AB@%FINIT%@AE@%           │ finit                   │  87   2-8%@NL@%
  6314. %@AB@%FNINIT%@AE@%          │                         │ 287   2-8%@NL@%
  6315.                 │                         │ 387   33%@NL@%
  6316. ────────────────┴─────────────────────────┴────────────────────────────────%@NL@%
  6317. %@NL@%
  6318. %@NL@%
  6319. %@NL@%
  6320. %@3@%%@AB@%FIST/FISTP%@CR:FIST      @%%@AE@%%@EH@%%@QR:fist@%%@QR:fistp@%%@NL@%
  6321. %@AB@%Store Integer%@AE@%%@QR:store integer@%%@NL@%
  6322. %@NL@%
  6323. %@4@%See %@AB@%FST%@AE@%%@BO:     6590f@%.%@EH@%%@NL@%
  6324. %@NL@%
  6325. %@NL@%
  6326. %@CR:127       @%%@NL@%
  6327. %@3@%%@AB@%FLD/FILD/FBLD%@CR:FLD       @%%@AE@%%@EH@%%@QR:fld@%%@QR:fild@%%@QR:fbld@%%@NL@%
  6328. %@AB@%Load%@AE@%%@QR:load@%%@QR:load operand@%%@NL@%
  6329. %@NL@%
  6330. %@4@%Pushes the specified operand onto the stack. All memory%@EH@% 
  6331. operands are automatically converted to temporary real numbers
  6332. before being loaded.%@NL@%
  6333. %@NL@%
  6334. ──────────────┬─────────────────────────┬──────────────────────────────────%@NL@%
  6335.               │ fld    st(3)            │ 87  17-22%@NL@%
  6336. %@AB@%FLD  %@AI@%reg%@AE@%      │                         │287  17-22%@NL@%
  6337.               │                         │387  14%@NL@%
  6338. ──────────────┼─────────────────────────┼──────────────────────────────────%@NL@%
  6339.               │ fld    longreal         │ 87  (s=38-56,l=40-60,t=53-65)+EA%@NL@%
  6340. %@AB@%FLD  %@AI@%memreal%@AE@%  │ fld    shortarray[bx+di]│287  s=38-56,l=40-60,t=53-65%@NL@%
  6341.               │ fld    tempreal         │387  s=20,l=25,t=44%@NL@%
  6342. ──────────────┼─────────────────────────┼──────────────────────────────────%@NL@%
  6343.               │ fld    mem16            │ 87  (w=46-54,d=52-60,q=60-68)+EA%@NL@%
  6344. %@AB@%FILD  %@AI@%memint%@AE@%  │ fld    DWORD PTR [bx]   │287  w=46-54,d=52-60,q=60-68%@NL@%
  6345.               │ fld    quads[si]        │387  w=61-65,d=45-52,q=56-67%@NL@%
  6346. ──────────────┼─────────────────────────┼──────────────────────────────────%@NL@%
  6347.               │ fld    packbcd          │ 87  (290-310)+EA%@NL@%
  6348. %@AB@%FBLD  %@AI@%membcd%@AE@%  │                         │287  290-310%@NL@%
  6349.               │                         │387  266-275%@NL@%
  6350. ──────────────┴─────────────────────────┴──────────────────────────────────%@NL@%
  6351. %@NL@%
  6352. %@NL@%
  6353. %@CR:128       @%%@NL@%
  6354. %@3@%%@AB@%FLD1/FLDZ/FLDPI/FLDL2E/FLDL2T/FLDLG2/FLDLN2%@CR:FLD1      @%%@AE@%%@EH@%%@QR:fld1@%%@QR:fldz@%%@QR:fldpi@%%@QR:fldl2e@%%@QR:fldl2t@%%@QR:fldlg2@%%@QR:fldln2@%%@NL@%
  6355. %@AB@%Load %@AI@%Constant%@AE@%%@QR:load@%%@QR:load constant@%%@NL@%
  6356. %@NL@%
  6357. %@4@%Pushes a constant onto the stack. The following constants%@EH@%
  6358. can be loaded:%@NL@%
  6359. %@NL@%
  6360. %@AU@%Instruction%@AE@%     %@AU@%Constant Loaded%@AE@%%@NL@%
  6361. %@AB@%FLD1%@AE@%            +1.0%@NL@%
  6362. %@AB@%FLDZ%@AE@%            +0.0%@NL@%
  6363. %@AB@%FLDPI%@AE@%           π%@NL@%
  6364. %@AB@%FLDL2E%@AE@%          Log(sub2)(e)%@NL@%
  6365. %@AB@%FLDL2T%@AE@%          Log(sub2)(10)%@NL@%
  6366. %@AB@%FLDLG2%@AE@%          Log(sub10)(2)%@NL@%
  6367. %@AB@%FLDLN2%@AE@%          Log(sub e)(2)%@NL@%
  6368. %@NL@%
  6369. ────────────────┬─────────────────────────┬────────────────────────────────%@NL@%
  6370.                 │ fld1                    │  87   15-21%@NL@%
  6371. %@AB@%FLD1%@AE@%            │                         │ 287   15-21%@NL@%
  6372.                 │                         │ 387   24%@NL@%
  6373. ────────────────┼─────────────────────────┼────────────────────────────────%@NL@%
  6374.                 │ fldz                    │  87   11-17%@NL@%
  6375. %@AB@%FLDZ%@AE@%            │                         │ 287   11-17%@NL@%
  6376.                 │                         │ 387   20%@NL@%
  6377. ────────────────┼─────────────────────────┼────────────────────────────────%@NL@%
  6378.                 │ fldpi                   │  87   16-22%@NL@%
  6379. %@AB@%FLDPI%@AE@%           │                         │ 287   16-22%@NL@%
  6380.                 │                         │ 387   40%@NL@%
  6381. ────────────────┼─────────────────────────┼────────────────────────────────%@NL@%
  6382.                 │ fldl2e                  │  87   15-21%@NL@%
  6383. %@AB@%FLDL2E%@AE@%          │                         │ 287   15-21%@NL@%
  6384.                 │                         │ 387   40%@NL@%
  6385. ────────────────┼─────────────────────────┼────────────────────────────────%@NL@%
  6386.                 │ fldl2t                  │  87   16-22%@NL@%
  6387. %@AB@%FLDL2T%@AE@%          │                         │ 287   16-22%@NL@%
  6388.                 │                         │ 387   40%@NL@%
  6389. ────────────────┼─────────────────────────┼────────────────────────────────%@NL@%
  6390.                 │ fldlg2                  │  87   18-24%@NL@%
  6391. %@AB@%FLDLG2%@AE@%          │                         │ 287   18-24%@NL@%
  6392.                 │                         │ 387   41%@NL@%
  6393. ────────────────┼─────────────────────────┼────────────────────────────────%@NL@%
  6394.                 │ fldln2                  │  87   17-23%@NL@%
  6395. %@AB@%FLDLN2%@AE@%          │                         │ 287   17-23%@NL@%
  6396.                 │                         │ 387   41%@NL@%
  6397. ────────────────┴─────────────────────────┴────────────────────────────────%@NL@%
  6398. %@NL@%
  6399. %@NL@%
  6400. %@NL@%
  6401. %@3@%%@AB@%FLDCW%@CR:FLDCW     @%%@AE@%%@EH@%%@QR:fldcw@%%@NL@%
  6402. %@AB@%Load Control Word%@AE@%%@QR:load control word@%%@QR:control word@%%@NL@%
  6403. %@NL@%
  6404. %@4@%Loads the the specified word into the coprocessor control%@EH@% 
  6405. word. The format of the control word is shown in the 
  6406. Interpreting Coprocessor Instruction section.%@NL@%
  6407. %@NL@%
  6408. ────────────────┬─────────────────────────┬────────────────────────────────%@NL@%
  6409.                 │ fldcw  ctrlword         │  87   (7-14)+EA%@NL@%
  6410. %@AB@%FLDCW  %@AI@%mem32%@AE@%    │                         │ 287   7-14%@NL@%
  6411.                 │                         │ 387   19%@NL@%
  6412. ────────────────┴─────────────────────────┴────────────────────────────────%@NL@%
  6413. %@NL@%
  6414. %@NL@%
  6415. %@CR:129       @%%@NL@%
  6416. %@3@%%@AB@%FLDENV%@CR:FLDENV    @%%@AE@%%@EH@%%@QR:fldenv@%%@NL@%
  6417. %@AB@%Load Environment State%@AE@%%@QR:load environment state@%%@QR:load environment@%%@QR:environment state@%%@QR:load state@%%@NL@%
  6418. %@NL@%
  6419. %@4@%Loads the 14-byte coprocessor environment state from%@EH@%
  6420. a specified memory location. The environment includes the 
  6421. control word, status word, tag word, instruction pointer, 
  6422. and operand pointer. On the 80387 in 32-bit mode, the 
  6423. environment state is made up of 28 bytes.%@NL@%
  6424. %@NL@%
  6425. ────────────────┬─────────────────────────┬────────────────────────────────%@NL@%
  6426.                 │ fldenv [bp+10]          │  87   (35-45)+EA%@NL@%
  6427. %@AB@%FLDENV  %@AI@%mem%@AE@%     │                         │ 287   35-45%@NL@%
  6428.                 │                         │ 387   71%@NL@%
  6429. ────────────────┴─────────────────────────┴────────────────────────────────%@NL@%
  6430. %@NL@%
  6431. %@NL@%
  6432. %@NL@%
  6433. %@3@%%@AB@%FMUL/FMULP/FIMUL%@CR:FMUL      @%%@AE@%%@EH@%%@QR:fmul@%%@QR:fmulp@%%@QR:fimul@%%@NL@%
  6434. %@AB@%Multiply%@AE@%%@QR:multiply@%%@NL@%
  6435. %@NL@%
  6436. %@4@%Multiplies the source by the destination and returns the%@EH@% 
  6437. product in the destination. If two register operands are 
  6438. specified, one must be %@AB@%ST%@AE@%. If a memory operand is specified, 
  6439. the product replaces the value in %@AB@%ST%@AE@%. Memory operands can be 
  6440. 32- or 64-bit real numbers or 16- or 32-bit integers. If no 
  6441. operand is specified, %@AB@%ST(1)%@AE@% is multiplied by %@AB@%ST%@AE@% and the 
  6442. stack is popped, returning the product in %@AB@%ST%@AE@%. For %@AB@%FMULP%@AE@%,
  6443. the source must be %@AB@%ST%@AE@%; the product is returned in the 
  6444. destination register and %@AB@%ST%@AE@% is popped.%@NL@%
  6445. %@NL@%
  6446. ───────────────┬─────────────────────────┬─────────────────────────────────%@NL@%
  6447.                │ fmul   st,st(2)         │  87  130-145 (90-105)%@FN@%
  6448. %@FC@%1. The clocks in parentheses show times for short values--those
  6449. %@FC@%with 40 trailing zeros in their fraction because they were
  6450. %@FC@%loaded from a short-real memory operand.%@EF@%1%@NL@%
  6451. %@AB@%FMUL%@AE@% «%@AI@%reg%@AE@%,%@AI@%reg%@AE@%» │ fmul   st(5),st         │ 287  130-145 (90-105)%@FN@%
  6452. %@FC@%1. The clocks in parentheses show times for short values--those
  6453. %@FC@%with 40 trailing zeros in their fraction because they were
  6454. %@FC@%loaded from a short-real memory operand.%@EF@%1%@NL@%
  6455.                │ fmul                    │ 387  t=46-54 (49),f=29-57 (52)%@FN@%
  6456. %@FC@%2. The clocks in parentheses show typical speeds.%@EF@%2%@NL@%
  6457. ───────────────┼─────────────────────────┼─────────────────────────────────%@NL@%
  6458.                │ fmulp  st(6),st         │  87   134-148 (94-108)%@FN@%
  6459. %@FC@%1. The clocks in parentheses show times for short values--those
  6460. %@FC@%with 40 trailing zeros in their fraction because they were
  6461. %@FC@%loaded from a short-real memory operand.%@EF@%1%@NL@%
  6462. %@AB@%FMULP %@AI@%reg%@AE@%,%@AB@%ST%@AE@%   │                         │ 287   134-148 (94-108)%@FN@%
  6463. %@FC@%1. The clocks in parentheses show times for short values--those
  6464. %@FC@%with 40 trailing zeros in their fraction because they were
  6465. %@FC@%loaded from a short-real memory operand.%@EF@%1%@NL@%
  6466.                │                         │ 387   29-57 (52)%@FN@%
  6467. %@FC@%2. The clocks in parentheses show typical speeds.%@EF@%2%@NL@%
  6468. ───────────────┼─────────────────────────┼─────────────────────────────────%@NL@%
  6469.                │ fmul   DWORD PTR [bx]   │  87   (s=110-125,l=154-168)+EA%@FN@%
  6470. %@FC@%3. If the register operand is a short value--having 40
  6471. %@FC@%trailing zeros in its fraction because it was loaded from
  6472. %@FC@%a short-real memory operand─then the timing is (112-126)+EA
  6473. %@FC@%on the 8087 or 112-126 on the 80287.%@EF@%3%@NL@%
  6474. %@AB@%FMUL %@AI@%memreal%@AE@%   │ fmul   shortreal[di+3]  │ 287   s=110-125,l=154-168%@FN@%
  6475. %@FC@%3. If the register operand is a short value─having 40
  6476. %@FC@%trailing zeros in its fraction because it was loaded from
  6477. %@FC@%a short-real memory operand─then the timing is (112-126)+EA
  6478. %@FC@%on the 8087 or 112-126 on the 80287.%@EF@%3%@NL@%
  6479.                │ fmul   longreal         │ 387   s=27-35,l=32-57%@NL@%
  6480. ───────────────┼─────────────────────────┼─────────────────────────────────%@NL@%
  6481.                │ fimul  int16            │  87   (w=124-138,d=130-144)+EA%@NL@%
  6482. %@AB@%FIMUL %@AI@%memint%@AE@%   │ fimul  warray[di]       │ 287   w=124-138,d=130-144%@NL@%
  6483.                │ fimul  double           │ 387   w=76-87,d=61-82%@NL@%
  6484. ───────────────┴─────────────────────────┴─────────────────────────────────%@NL@%
  6485. %@NL@%
  6486. %@NL@%
  6487. %@CR:130       @%%@NL@%
  6488. %@3@%%@AB@%FN%@AI@%instuction%@CR:FNinstucti@%%@AE@%%@EH@%%@QR:fn@%%@NL@%
  6489. %@AB@%No-Wait Instructions%@AE@%%@QR:no wait@%%@QR:no-wait@%%@QR:no-wait instructions@%%@QR:no wait instructions@%%@NL@%
  6490. %@NL@%
  6491. %@4@%Instructions that have no-wait versions include %@AB@%FCLEX%@AE@%,%@EH@%
  6492. %@AB@%FSAVE%@AE@%, %@AB@%FSTCW%@AE@%, %@AB@%FSTENV%@AE@%, and %@AB@%FSTSW%@AE@%. Wait versions of 
  6493. instructions check for unmasked numeric errors; no-wait 
  6494. versions do not. When the %@AB@%.8087%@AE@% directive is used, %@AB@%MASM%@AE@% 
  6495. puts a %@AB@%WAIT%@AE@% instruction before the wait versions and
  6496. a %@AB@%NOP%@AE@% instruction before the no-wait versions.%@NL@%
  6497. %@NL@%
  6498. %@NL@%
  6499. %@NL@%
  6500. %@3@%%@AB@%FNOP%@CR:FNOP      @%%@AE@%%@EH@%%@QR:fnop@%%@NL@%
  6501. %@AB@%No Operation%@AE@%%@QR:no operation@%%@QR:nop@%%@NL@%
  6502. %@NL@%
  6503. %@4@%Performs no operation. %@AB@%FNOP%@AE@% can be used for timing delays or%@EH@% 
  6504. alignment.%@NL@%
  6505. %@NL@%
  6506. ────────────────┬─────────────────────────┬────────────────────────────────%@NL@%
  6507.                 │ fnop                    │  87   10-16%@NL@%
  6508. %@AB@%FNOP%@AE@%            │                         │ 287   10-16%@NL@%
  6509.                 │                         │ 387   12%@NL@%
  6510. ────────────────┴─────────────────────────┴────────────────────────────────%@NL@%
  6511. %@NL@%
  6512. %@NL@%
  6513. %@NL@%
  6514. %@3@%%@AB@%FPATAN%@CR:FPATAN    @%%@AE@%%@EH@%%@QR:fpatan@%%@NL@%
  6515. %@AB@%Partial Arctangent%@AE@%%@QR:partial arctangent@%%@QR:arctangent@%%@NL@%
  6516. %@NL@%
  6517. %@4@%Finds the partial tangent by calculating Z = ARCTAN(Y / X).%@EH@% 
  6518. X is taken from %@AB@%ST%@AE@% and Y from %@AB@%ST(1)%@AE@%. On the 8087 and 80287, 
  6519. Y and X must be in the range 0 ≤ Y < X < ∞. On the 80387, 
  6520. there is no restriction on X and Y. X is popped from the 
  6521. stack and Z replaces Y in %@AB@%ST%@AE@%.%@NL@%
  6522. %@NL@%
  6523. ────────────────┬─────────────────────────┬────────────────────────────────%@NL@%
  6524.                 │ fpatan                  │  87   250-800%@NL@%
  6525. %@AB@%FPATAN%@AE@%          │                         │ 287   250-800%@NL@%
  6526.                 │                         │ 387   314-487%@NL@%
  6527. ────────────────┴─────────────────────────┴────────────────────────────────%@NL@%
  6528. %@NL@%
  6529. %@NL@%
  6530. %@CR:131       @%%@NL@%
  6531. %@3@%%@AB@%FPREM%@CR:FPREM     @%%@AE@%%@EH@%%@QR:fprem@%%@NL@%
  6532. %@AB@%Partial Remainder%@AE@%%@QR:partial remainder@%%@QR:remainder@%%@NL@%
  6533. %@NL@%
  6534. %@4@%Calculates the remainder of %@AB@%ST%@AE@% divided by %@AB@%ST(1)%@AE@%, returning%@EH@% 
  6535. the result in %@AB@%ST%@AE@%. The remainder retains the same sign as the 
  6536. original dividend. The calculation uses the following 
  6537. formula:%@NL@%
  6538. %@NL@%
  6539.          %@AI@%remainder%@AE@% = %@AB@%ST %@AE@%- %@AB@%ST(1) %@AE@%* %@AI@%quotient%@AE@%%@NL@%
  6540. %@NL@%
  6541. %@4@%The %@AI@%quotient%@AE@% is the exact value obtained by chopping%@EH@%
  6542. %@AB@%ST %@AE@%/ %@AB@%ST(1)%@AE@% toward 0. The instruction is intended to be used
  6543. in a loop that repeats until the reduction is complete, as
  6544. indicated by the condition codes of the status word.%@NL@%
  6545. %@NL@%
  6546. ────────────────┬─────────────────────────┬────────────────────────────────%@NL@%
  6547.                 │ fprem                   │  87   15-190%@NL@%
  6548. %@AB@%FPREM%@AE@%           │                         │ 287   15-190%@NL@%
  6549.                 │                         │ 387   74-155%@NL@%
  6550. ────────────────┴─────────────────────────┴────────────────────────────────%@NL@%
  6551. %@NL@%
  6552. %@AB@%Condition Codes for FPREM and FPREM1%@AE@%%@NL@%
  6553. %@NL@%
  6554. %@AU@%C3%@AE@%    %@AU@%C2%@AE@%    %@AU@%C1%@AE@%    %@AU@%C0%@AE@%    %@AU@%Meaning%@AE@%%@NL@%
  6555. ?     1     ?     ?     Incomplete reduction%@NL@%
  6556. 0     0     0     0     %@AI@%quotient%@AE@% MOD 8 = 0%@NL@%
  6557. 0     0     0     1     %@AI@%quotient%@AE@% MOD 8 = 4%@NL@%
  6558. 0     0     1     0     %@AI@%quotient%@AE@% MOD 8 = 1%@NL@%
  6559. 0     0     1     1     %@AI@%quotient%@AE@% MOD 8 = 5%@NL@%
  6560. 1     0     0     0     %@AI@%quotient%@AE@% MOD 8 = 2%@NL@%
  6561. 1     0     0     1     %@AI@%quotient%@AE@% MOD 8 = 6%@NL@%
  6562. 1     0     1     0     %@AI@%quotient%@AE@% MOD 8 = 3%@NL@%
  6563. 1     0     1     1     %@AI@%quotient%@AE@% MOD 8 = 7%@NL@%
  6564. %@NL@%
  6565. %@NL@%
  6566. %@CR:132       @%%@NL@%
  6567. %@3@%%@AB@%FPREM1%@CR:FPREM1    @%%@AE@%%@EH@%%@QR:fprem1@%%@NL@%
  6568. %@AB@%Partial Remainder (IEEE Compatible)%@AE@%%@QR:partial remainder@%%@QR:ieee partial remainder@%%@QR:ieee remainder@%%@NL@%
  6569. %@AB@%80387 Only%@AE@%%@NL@%
  6570. %@NL@%
  6571. %@4@%Calculates the remainder of %@AB@%ST%@AE@% divided by %@AB@%ST(1)%@AE@%, returning%@EH@% 
  6572. the result in %@AB@%ST%@AE@%. The remainder retains the same sign as
  6573. the original dividend. The calculation uses the following 
  6574. formula:%@NL@%
  6575. %@NL@%
  6576.         %@AI@%remainder%@AE@% = %@AB@%ST %@AE@%- %@AB@%ST(1) %@AE@%* %@AI@%quotient%@AE@%%@NL@%
  6577. %@NL@%
  6578. %@4@%The %@AI@%quotient%@AE@% is the integer nearest to the exact value%@EH@%
  6579. %@AB@%ST %@AE@%/ %@AB@%ST(1)%@AE@%. If there are two integers equally close, the even 
  6580. integer is used. The instruction is intended to be used in a 
  6581. loop that repeats until the reduction is complete, as 
  6582. indicated by the condition codes of the status word. See
  6583. %@AB@%FPREM%@AE@%%@BO:     62ad7@% for the possible condition codes.%@NL@%
  6584. %@NL@%
  6585. ────────────────┬─────────────────────────┬────────────────────────────────%@NL@%
  6586.                 │ fprem1                  │  87   ─%@NL@%
  6587. %@AB@%FPREM1%@AE@%          │                         │ 287   ─%@NL@%
  6588.                 │                         │ 387   95-185%@NL@%
  6589. ────────────────┴─────────────────────────┴────────────────────────────────%@NL@%
  6590. %@NL@%
  6591. %@NL@%
  6592. %@NL@%
  6593. %@3@%%@AB@%FPTAN%@CR:FPTAN     @%%@AE@%%@EH@%%@QR:fptan@%%@NL@%
  6594. %@AB@%Partial Tangent%@AE@%%@QR:partial tangent@%%@QR:tangent@%%@NL@%
  6595. %@NL@%
  6596. %@4@%Finds the partial tangent by calculating Y / X = TAN(Z).%@EH@% 
  6597. Z is taken from %@AB@%ST%@AE@%. Z must be in the range 0 ≤ Z ≤ π / 4
  6598. on the 8087 and 80287. On the 80387, |Z| must be less than 2^63. 
  6599. The result is the ratio Y / X. Y replaces Z, and X is pushed 
  6600. into %@AB@%ST%@AE@%. Thus Y is returned in %@AB@%ST(1)%@AE@% and X in %@AB@%ST%@AE@%.%@NL@%
  6601. %@NL@%
  6602. ────────────────┬─────────────────────────┬────────────────────────────────%@NL@%
  6603.                 │ fptan                   │  87   30-540%@NL@%
  6604. %@AB@%FPTAN%@AE@%           │                         │ 287   30-540%@NL@%
  6605.                 │                         │ 387   191-497%@FN@%
  6606. %@FC@%1. For operands with an absolute value greater than π/4,
  6607. %@FC@%up to 76 additional clocks may be required.%@EF@%1%@NL@%
  6608. ────────────────┴─────────────────────────┴────────────────────────────────%@NL@%
  6609. %@NL@%
  6610. %@NL@%
  6611. %@CR:133       @%%@NL@%
  6612. %@3@%%@AB@%FRNDINT%@CR:FRNDINT   @%%@AE@%%@EH@%%@QR:frndint@%%@NL@%
  6613. %@AB@%Round to Integer%@AE@%%@QR:round to integer@%%@QR:round@%%@NL@%
  6614. %@NL@%
  6615. %@4@%Rounds %@AB@%ST%@AE@% from a real number to an integer. The rounding%@EH@%
  6616. control (RC) field of the control word specifies the rounding
  6617. method, as shown in the introduction to this section.%@NL@%
  6618. %@NL@%
  6619. ────────────────┬─────────────────────────┬────────────────────────────────%@NL@%
  6620.                 │ frndint                 │  87   16-50%@NL@%
  6621. %@AB@%FRNDINT%@AE@%         │                         │ 287   16-50%@NL@%
  6622.                 │                         │ 387   66-80%@NL@%
  6623. ────────────────┴─────────────────────────┴────────────────────────────────%@NL@%
  6624. %@NL@%
  6625. %@NL@%
  6626. %@NL@%
  6627. %@3@%%@AB@%FRSTOR%@CR:FRSTOR    @%%@AE@%%@EH@%%@QR:frstor@%%@NL@%
  6628. %@AB@%Restore Saved State%@AE@%%@QR:restore saved state@%%@QR:restore state@%%@QR:restore@%%@NL@%
  6629. %@NL@%
  6630. %@4@%Restores the 94-byte coprocessor state to the coprocessor%@EH@% 
  6631. from the specified memory location. In 32-bit mode on the 
  6632. 80387, the environment state takes 108 bytes.%@NL@%
  6633. %@NL@%
  6634. ────────────────┬─────────────────────────┬────────────────────────────────%@NL@%
  6635.                 │ frstor [bp-94]          │  87   (197-207)+EA%@NL@%
  6636. %@AB@%FRSTOR  %@AI@%mem94%@AE@%   │                         │ 287   %@FN@%
  6637. %@FC@%1. Clock counts are not meaningful in determining overall
  6638. %@FC@%execution time of this instruction. Timing is determined
  6639. %@FC@%by operand transfers.%@EF@%1%@NL@%
  6640.                 │                         │ 387   308%@NL@%
  6641. ────────────────┴─────────────────────────┴────────────────────────────────%@NL@%
  6642. %@NL@%
  6643. %@NL@%
  6644. %@NL@%
  6645. %@3@%%@AB@%FSAVE/FNSAVE%@CR:FSAVE     @%%@AE@%%@EH@%%@QR:fsave@%%@QR:fnsave@%%@NL@%
  6646. %@AB@%Save Coprocessor State%@AE@%%@QR:save coprocessor state@%%@QR:save state@%%@QR:coprocessor state@%%@NL@%
  6647. %@NL@%
  6648. %@4@%Stores the 94-byte coprocessor state to the specified memory%@EH@% 
  6649. location. In 32-bit mode on the 80387, the environment state 
  6650. takes 108 bytes. This instruction has wait and no-wait 
  6651. versions. After the save, the coprocessor is initialized
  6652. as if %@AB@%FINIT%@AE@% had been executed.%@NL@%
  6653. %@NL@%
  6654. ────────────────┬─────────────────────────┬────────────────────────────────%@NL@%
  6655. %@AB@%FSAVE  %@AI@%m94%@AE@%      │ fsave  [bp-94]          │  87  (197-207)+EA%@NL@%
  6656. %@AB@%FNSAVE  %@AI@%m94%@AE@%     │ fsave  cobuffer         │ 287  %@FN@%
  6657. %@FC@%1. Clock counts are not meaningful in determining overall
  6658. %@FC@%execution time of this instruction. Timing is determined
  6659. %@FC@%by operand transfers.%@EF@%1%@NL@%
  6660.                 │                         │ 387  375-376%@NL@%
  6661. ────────────────┴─────────────────────────┴────────────────────────────────%@NL@%
  6662. %@NL@%
  6663. %@NL@%
  6664. %@CR:134       @%%@NL@%
  6665. %@3@%%@AB@%FSCALE%@CR:FSCALE    @%%@AE@%%@EH@%%@QR:fscale@%%@NL@%
  6666. %@AB@%Scale%@AE@%%@QR:scale@%%@NL@%
  6667. %@NL@%
  6668. %@4@%Scales by powers of two by computing the function Y = Y * 2^X.%@EH@%
  6669. X is the scaling factor taken from %@AB@%ST(1)%@AE@%, and Y is the value to be
  6670. scaled from %@AB@%ST%@AE@%. The scaled result replaces the value in %@AB@%ST%@AE@%. The
  6671. scaling factor remains in %@AB@%ST(1)%@AE@%. If the scaling factor is not
  6672. an integer, it will be truncated toward zero before the scaling. %@NL@%
  6673. %@NL@%
  6674. %@4@%The 80387 has no restrictions on the range of operands, but on%@EH@%
  6675. the 8087 and 80287, if X is not in the range -2^15 ≤ X <2(^15) or if
  6676. X is in the range 0 < X < 1, the result will be undefined.%@NL@%
  6677. %@NL@%
  6678. ────────────────┬─────────────────────────┬────────────────────────────────%@NL@%
  6679.                 │ fscale                  │  87   32-38 %@NL@%
  6680. %@AB@%FSCALE%@AE@%          │                         │ 287   32-38%@NL@%
  6681.                 │                         │ 387   67-86%@NL@%
  6682. ────────────────┴─────────────────────────┴────────────────────────────────%@NL@%
  6683. %@NL@%
  6684. %@NL@%
  6685. %@NL@%
  6686. %@3@%%@AB@%FSETPM%@CR:FSETPM    @%%@AE@%%@EH@%%@QR:fsetpm@%%@NL@%
  6687. %@AB@%Set Protected Mode%@AE@%%@QR:set protected mode@%%@QR:protected mode@%%@NL@%
  6688. %@AB@%80287 Only%@AE@%%@NL@%
  6689. %@NL@%
  6690. %@4@%Sets the 80287 to protected mode. The instruction and%@EH@% 
  6691. operand pointers are in the protected mode format after this 
  6692. instruction. On the 80387, %@AB@%FSETPM%@AE@% is recognized but interpreted
  6693. as %@AB@%FNOP%@AE@%, since the 80386 handles addressing identically in real
  6694. and protected mode.%@NL@%
  6695. %@NL@%
  6696. ────────────────┬─────────────────────────┬────────────────────────────────%@NL@%
  6697.                 │ fsetpm                  │  87   ─ %@NL@%
  6698. %@AB@%FSETPM%@AE@%          │                         │ 287   2-8%@NL@%
  6699.                 │                         │ 387   12%@NL@%
  6700. ────────────────┴─────────────────────────┴────────────────────────────────%@NL@%
  6701. %@NL@%
  6702. %@NL@%
  6703. %@CR:135       @%%@NL@%
  6704. %@3@%%@AB@%FSIN%@CR:FSIN      @%%@AE@%%@EH@%%@QR:fsin@%%@NL@%
  6705. %@AB@%Sine%@AE@%%@QR:sine@%%@NL@%
  6706. %@AB@%80387 Only%@AE@%%@NL@%
  6707. %@NL@%
  6708. %@4@%Replaces a value in radians in %@AB@%ST%@AE@% with its sine. If %@AB@%ST%@AE@% is in%@EH@% 
  6709. the range |%@AB@%ST%@AE@%| < 2(^63), then the C2 bit of the status word is 
  6710. cleared and the sine is calculated. Otherwise, C2 is set and 
  6711. no calculation is done. %@AB@%ST%@AE@% can be reduced to the required 
  6712. range with %@AB@%FPREM%@AE@% or %@AB@%FPREM1%@AE@%.%@NL@%
  6713. %@NL@%
  6714. ────────────────┬─────────────────────────┬────────────────────────────────%@NL@%
  6715.                 │ fsin                    │  87   ─%@NL@%
  6716. %@AB@%FSIN%@AE@%            │                         │ 287   ─%@NL@%
  6717.                 │                         │ 387   122-771%@FN@%
  6718. %@FC@%1. For operands with an absolute value greater than π/4,
  6719. %@FC@%up to 76 additional clocks may be required.%@EF@%1%@NL@%
  6720. ────────────────┴─────────────────────────┴────────────────────────────────%@NL@%
  6721. %@NL@%
  6722. %@NL@%
  6723. %@NL@%
  6724. %@3@%%@AB@%FSINCOS%@CR:FSINCOS   @%%@AE@%%@EH@%%@QR:fsincos@%%@NL@%
  6725. %@AB@%Sine and Cosine%@AE@%%@QR:sine@%%@QR:cosine@%%@NL@%
  6726. %@AB@%80387 Only%@AE@%%@NL@%
  6727. %@NL@%
  6728. %@4@%Computes the sine and cosine of a radian value in %@AB@%ST%@AE@%. The%@EH@% 
  6729. sine replaces the value in %@AB@%ST%@AE@% and then the cosine is pushed 
  6730. onto the stack. If %@AB@%ST%@AE@% is in the range |%@AB@%ST%@AE@%| < 2(^63), the C2 bit 
  6731. of the status word is cleared and the sine and cosine are 
  6732. calculated. Otherwise, C2 is set and no calculation is done.
  6733. %@AB@%ST%@AE@% can be reduced to the required range with %@AB@%FPREM%@AE@% 
  6734. or %@AB@%FPREM1%@AE@%.%@NL@%
  6735. %@NL@%
  6736. ────────────────┬─────────────────────────┬────────────────────────────────%@NL@%
  6737.                 │ fsincos                 │  87   ─%@NL@%
  6738. %@AB@%FSINCOS%@AE@%         │                         │ 287   ─%@NL@%
  6739.                 │                         │ 387   194-809%@FN@%
  6740. %@FC@%1. For operands with an absolute value greater than π/4,
  6741. %@FC@%up to 76 additional clocks may be required.%@EF@%1%@NL@%
  6742. ────────────────┴─────────────────────────┴────────────────────────────────%@NL@%
  6743. %@NL@%
  6744. %@NL@%
  6745. %@CR:136       @%%@NL@%
  6746. %@3@%%@AB@%FSQRT%@CR:FSQRT     @%%@AE@%%@EH@%%@QR:fsqrt@%%@NL@%
  6747. %@AB@%Square Root%@AE@%%@QR:square root@%%@NL@%
  6748. %@NL@%
  6749. %@4@%Replaces the value of %@AB@%ST%@AE@% with its square root. (The square root%@EH@%
  6750. of -0 is -0.)%@NL@%
  6751. %@NL@%
  6752. ────────────────┬─────────────────────────┬────────────────────────────────%@NL@%
  6753.                 │ fsqrt                   │  87   180-186%@NL@%
  6754. %@AB@%FSQRT%@AE@%           │                         │ 287   180-186%@NL@%
  6755.                 │                         │ 387   122-129%@NL@%
  6756. ────────────────┴─────────────────────────┴────────────────────────────────%@NL@%
  6757. %@NL@%
  6758. %@NL@%
  6759. %@NL@%
  6760. %@3@%%@AB@%FST/FSTP/FIST/FISTP/FBSTP%@CR:FST       @%%@AE@%%@EH@%%@QR:fst@%%@QR:fstp@%%@QR:fist@%%@QR:fistp@%%@QR:fbstp@%%@NL@%
  6761. %@AB@%Store%@AE@%%@QR:store@%%@QR:store value@%%@NL@%
  6762. %@NL@%
  6763. %@4@%Stores the value in %@AB@%ST%@AE@% to the specified memory location or%@EH@% 
  6764. register. Temporary real values in registers are converted 
  6765. to the appropriate integer, BCD, or floating-point format
  6766. as they are stored. With %@AB@%FSTP%@AE@%, %@AB@%FISTP%@AE@%, and %@AB@%FBSTP%@AE@%, the %@AB@%ST%@AE@% 
  6767. register value is popped off the stack. %@NL@%
  6768. %@NL@%
  6769. ───────────────┬───────────────────────┬───────────────────────────────────%@NL@%
  6770.                │ fst    st(6)          │  87  15-22%@NL@%
  6771. %@AB@%FST  %@AI@%reg%@AE@%       │ fst    st             │ 287  15-22%@NL@%
  6772.                │                       │ 387  11%@NL@%
  6773. ───────────────┼───────────────────────┼───────────────────────────────────%@NL@%
  6774.                │ fstp   st             │  87  17-24%@NL@%
  6775. %@AB@%FSTP  %@AI@%reg%@AE@%      │ fstp   st(3)          │ 287  17-24%@NL@%
  6776.                │                       │ 387  12%@NL@%
  6777. ───────────────┼───────────────────────┼───────────────────────────────────%@NL@%
  6778.                │ fst    shortreal      │  87  (s=84-90,l=96-104)+EA%@NL@%
  6779. %@AB@%FST  %@AI@%memreal%@AE@%   │ fst    longs[bx]      │ 287  s=84-90,l=96-104%@NL@%
  6780.                │                       │ 387  s=44,l=45%@NL@%
  6781. ───────────────┼───────────────────────┼───────────────────────────────────%@NL@%
  6782.                │ fstp   longreal       │  87  (s=86-92,l=98-106,t=52-58)+EA%@NL@%
  6783. %@AB@%FSTP  %@AI@%memreal%@AE@%  │ fstp   tempreals[bx]  │ 287  s=86-92,l=98-106,t=52-58%@NL@%
  6784.                │                       │ 387  s=44,l=45,t=53%@NL@%
  6785. ───────────────┼───────────────────────┼───────────────────────────────────%@NL@%
  6786.                │ fist   int16          │  87  (w=80-90,d=82-92)+EA%@NL@%
  6787. %@AB@%FIST  %@AI@%memint%@AE@%   │ fist   doubles[8]     │ 287  w=80-90,d=82-92
  6788.                │                       │ 387  w=82-95,d=79-93%@NL@%
  6789. ───────────────┼───────────────────────┼───────────────────────────────────%@NL@%
  6790.                │ fistp  longint        │ 87   (w=82-92,d=84-94,q=94-105)+EA%@NL@%
  6791. %@AB@%FISTP  %@AI@%memint%@AE@%  │ fistp  doubles[bx]    │ 287  w=82-92,d=84-94,q=94-105%@NL@%
  6792.                │                       │ 387  w=82-95,d=79-93,q=80-97%@NL@%
  6793. ───────────────┼───────────────────────┼───────────────────────────────────%@NL@%
  6794.                │ fbstp  bcds[bx]       │  87  (520-540)+EA %@NL@%
  6795. %@AB@%FBSTP  %@AI@%membcd%@AE@%  │                       │ 287  520-540%@NL@%
  6796.                │                       │ 387  512-534%@NL@%
  6797. ───────────────┴───────────────────────┴───────────────────────────────────%@NL@%
  6798. %@NL@%
  6799. %@NL@%
  6800. %@CR:137       @%%@NL@%
  6801. %@3@%%@AB@%FSTCW/FNSTCW%@CR:FSTCW     @%%@AE@%%@EH@%%@QR:fstcw@%%@QR:fnstcw@%%@NL@%
  6802. %@AB@%Store Control Word%@AE@%%@QR:store control word@%%@QR:control word@%%@NL@%
  6803. %@NL@%
  6804. %@4@%Stores the control word to a specified 16-bit memory%@EH@%
  6805. operand. This instruction has wait and no-wait versions.%@NL@%
  6806. %@NL@%
  6807. ────────────────┬─────────────────────────┬────────────────────────────────%@NL@%
  6808. %@AB@%FSTCW%@AE@%           │ fstcw  ctrlword         │  87   12-18%@NL@%
  6809. %@AB@%FNSTCW%@AE@%          │                         │ 287   12-18%@NL@%
  6810.                 │                         │ 387   15%@NL@%
  6811. ────────────────┴─────────────────────────┴────────────────────────────────%@NL@%
  6812. %@NL@%
  6813. %@NL@%
  6814. %@NL@%
  6815. %@3@%%@AB@%FSTENV/FNSTENV%@CR:FSTENV    @%%@AE@%%@EH@%%@QR:fstenv@%%@QR:fnstenv@%%@NL@%
  6816. %@AB@%Store Environment State%@AE@%%@QR:store environment state@%%@QR:store environment@%%@QR:environment state@%%@NL@%
  6817. %@NL@%
  6818. %@4@%Stores the 14-byte coprocessor environment state to a%@EH@%
  6819. specified memory location. The environment state includes 
  6820. the control word, status word, tag word, instruction 
  6821. pointer, and operand pointer. On the 80387 in 32-bit mode, 
  6822. the environment state is made up of 28 bytes.%@NL@%
  6823. %@NL@%
  6824. ────────────────┬─────────────────────────┬────────────────────────────────%@NL@%
  6825. %@AB@%FSTENV  %@AI@%mem%@AE@%     │ fstenv [bp-14]          │  87   (40-50)+EA%@NL@%
  6826. %@AB@%FNSTENV  %@AI@%mem%@AE@%    │                         │ 287   40-50%@NL@%
  6827.                 │                         │ 387   103-104%@NL@%
  6828. ────────────────┴─────────────────────────┴────────────────────────────────%@NL@%
  6829. %@NL@%
  6830. %@NL@%
  6831. %@NL@%
  6832. %@3@%%@AB@%FSTSW/FNSTSW%@CR:FSTSW     @%%@AE@%%@EH@%%@QR:fstsw@%%@QR:fnstsw@%%@NL@%
  6833. %@AB@%Store Status Word%@AE@%%@QR:store status word@%%@NL@%
  6834. %@NL@%
  6835. %@4@%Stores the status word to a specified 16-bit memory operand.%@EH@%
  6836. On the 80287 and 80387, the status word can be stored also 
  6837. to the processor's %@AB@%AX%@AE@% register. This instruction has wait 
  6838. and no-wait versions.%@NL@%
  6839. %@NL@%
  6840. ────────────────┬─────────────────────────┬────────────────────────────────%@NL@%
  6841. %@AB@%FSTSW  %@AI@%mem%@AE@%      │ fstsw  statword         │  87   12-18%@NL@%
  6842. %@AB@%FNSTSW  %@AI@%mem%@AE@%     │                         │ 287   12-18%@NL@%
  6843.                 │                         │ 387   15%@NL@%
  6844. ────────────────┼─────────────────────────┼────────────────────────────────%@NL@%
  6845. %@AB@%FSTSW AX%@AE@%        │ fstsw  ax               │  87   ─%@NL@%
  6846. %@AB@%FNSTSW  AX%@AE@%      │                         │ 287   10-16%@NL@%
  6847.                 │                         │ 387   13%@NL@%
  6848. ────────────────┴─────────────────────────┴────────────────────────────────%@NL@%
  6849. %@NL@%
  6850. %@NL@%
  6851. %@CR:138       @%%@NL@%
  6852. %@3@%%@AB@%FSUB/FSUBP/FISUB%@CR:FSUB      @%%@AE@%%@EH@%%@QR:fsub@%%@QR:fsubp@%%@QR:fisub@%%@NL@%
  6853. %@AB@%Subtract%@AE@%%@QR:subtract@%%@NL@%
  6854. %@NL@%
  6855. %@4@%Subtracts the source from the destination and returns the%@EH@%
  6856. difference in the destination. If two register operands are 
  6857. specified, one must be %@AB@%ST%@AE@%. If a memory operand is specified, 
  6858. the result replaces the value in %@AB@%ST%@AE@%. Memory operands can be 
  6859. 32- or 64-bit real numbers or 16- or 32-bit integers. If no 
  6860. operand is specified, %@AB@%ST%@AE@% is subtracted from %@AB@%ST(1)%@AE@% and the 
  6861. stack is popped, returning the difference in %@AB@%ST%@AE@%. For %@AB@%FSUBP%@AE@%, 
  6862. the source must be %@AB@%ST%@AE@%; the difference (destination minus 
  6863. source) is returned in the destination register and %@AB@%ST%@AE@%
  6864. is popped.%@NL@%
  6865. %@NL@%
  6866. ────────────────┬─────────────────────────┬────────────────────────────────%@NL@%
  6867.                 │ fsub   st,st(2)         │  87   70-100%@NL@%
  6868. %@AB@%FSUB%@AE@%  «%@AI@%reg%@AE@%,%@AI@%reg%@AE@%» │ fsub   st(5),st         │ 287   70-100%@NL@%
  6869.                 │ fsub                    │ 387   t=29-37,f=26-34%@NL@%
  6870. ────────────────┼─────────────────────────┼────────────────────────────────%@NL@%
  6871.                 │ fsubp  st(6),st         │  87   75-105%@NL@%
  6872. %@AB@%FSUBP  %@AI@%reg%@AE@%,%@AB@%ST%@AE@%   │                         │ 287   75-105%@NL@%
  6873.                 │                         │ 387   26-34%@NL@%
  6874. ────────────────┼─────────────────────────┼────────────────────────────────%@NL@%
  6875.                 │ fsub   longreal         │  87   (s=90-120,s=95-125)+EA%@NL@%
  6876. %@AB@%FSUB  %@AI@%memreal%@AE@%   │ fsub   shortreals[di]   │ 287   s=90-120,l=95-125%@NL@%
  6877.                 │                         │ 387   s=24-32,l=28-36%@NL@%
  6878. ────────────────┼─────────────────────────┼────────────────────────────────%@NL@%
  6879.                 │ fisub  double           │  87   (w=102-137,d=108-143)+EA%@NL@%
  6880. %@AB@%FISUB  %@AI@%memint%@AE@%   │ fisub  warray[di]       │ 287   w=102-137,d=108-143%@NL@%
  6881.                 │                         │ 387   w=71-83,d=57-82%@NL@%
  6882. ────────────────┴─────────────────────────┴────────────────────────────────%@NL@%
  6883. %@NL@%
  6884. %@NL@%
  6885. %@CR:139       @%%@NL@%
  6886. %@3@%%@AB@%FSUBR/FSUBRP/FISUBR%@CR:FSUBR     @%%@AE@%%@EH@%%@QR:fsubr@%%@QR:fsubrp@%%@QR:fisubr@%%@NL@%
  6887. %@AB@%Subtract Reversed%@AE@%%@QR:subtract reversed@%%@NL@%
  6888. %@NL@%
  6889. %@4@%Subtracts the destination operand from the source operand,%@EH@%
  6890. and returns the result in the destination operand. If two 
  6891. register operands are specified, one must be %@AB@%ST%@AE@%. If a memory 
  6892. operand is specified, the result replaces the value in %@AB@%ST%@AE@%. 
  6893. Memory operands can be 32- or 64-bit real numbers or 16-
  6894. or 32-bit integers. If no operand is specified, %@AB@%ST(1)%@AE@% is 
  6895. subtracted from %@AB@%ST%@AE@% and the stack is popped, returning the 
  6896. difference in %@AB@%ST%@AE@%. For %@AB@%FSUBRP%@AE@%, the source must be %@AB@%ST%@AE@%; the 
  6897. difference (source minus destination) is returned in
  6898. the destination register and %@AB@%ST%@AE@% is popped.%@NL@%
  6899. %@NL@%
  6900. ────────────────┬─────────────────────────┬────────────────────────────────%@NL@%
  6901.                 │ fsubr  st,st(2)         │  87   70-100%@NL@%
  6902. %@AB@%FSUBR%@AE@%  «%@AI@%reg%@AE@%,%@AI@%reg%@AE@%»│ fsubr  st(5),st         │ 287   70-100%@NL@%
  6903.                 │ fsubr                   │ 387   t=29-37,f=26-34%@NL@%
  6904. ────────────────┼─────────────────────────┼────────────────────────────────%@NL@%
  6905.                 │ fsubrp st(6),st         │  87   75-105%@NL@%
  6906. %@AB@%FSUBRP  %@AI@%reg%@AE@%,%@AB@%ST%@AE@%  │                         │ 287   75-105%@NL@%
  6907.                 │                         │ 387   26-34%@NL@%
  6908. ────────────────┼─────────────────────────┼────────────────────────────────%@NL@%
  6909.                 │ fsubr  QWORD PTR [bx]   │  87   (s=90-120,s=95-125)+EA%@NL@%
  6910. %@AB@%FSUBR  %@AI@%memreal%@AE@%  │ fsubr  shortreal[di]    │ 287   s=90-120,l=95-125%@NL@%
  6911.                 │ fsubr  longreal         │ 387   s=25-33,l=29-37%@NL@%
  6912. ────────────────┼─────────────────────────┼────────────────────────────────%@NL@%
  6913.                 │ fisubr int16            │  87   (w=103-139,d=109-144)+EA%@NL@%
  6914. %@AB@%FISUBR  %@AI@%memint%@AE@%  │ fisubr warray[di]       │ 287   w=103-139,d=109-144%@NL@%
  6915.                 │ fisubr double           │ 387   w=72-84,d=58-83%@NL@%
  6916. ────────────────┴─────────────────────────┴────────────────────────────────%@NL@%
  6917. %@NL@%
  6918. %@NL@%
  6919. %@NL@%
  6920. %@3@%%@AB@%FTST%@CR:FTST      @%%@AE@%%@EH@%%@QR:ftst@%%@NL@%
  6921. %@AB@%Test for Zero%@AE@%%@QR:test for zero@%%@QR:test zero@%%@NL@%
  6922. %@NL@%
  6923. %@4@%Compares %@AB@%ST%@AE@% with +0.0 and sets the condition of the status%@EH@%
  6924. word according to the result.%@NL@%
  6925. %@NL@%
  6926. ────────────────┬─────────────────────────┬────────────────────────────────%@NL@%
  6927.                 │ ftst                    │  87   38-48%@NL@%
  6928. %@AB@%FTST%@AE@%            │                         │ 287   38-48%@NL@%
  6929.                 │                         │ 387   28%@NL@%
  6930. ────────────────┴─────────────────────────┴────────────────────────────────%@NL@%
  6931. %@NL@%
  6932. %@AB@%Condition Codes for FTST%@AE@%%@NL@%
  6933. %@NL@%
  6934. %@AU@%C3%@AE@%    %@AU@%C2%@AE@%    %@AU@%C1%@AE@%    %@AU@%C0%@AE@%    %@AU@%Meaning%@AE@%%@NL@%
  6935. 0     0     ?     0     %@AB@%ST%@AE@% is positive%@NL@%
  6936. 0     0     ?     1     %@AB@%ST%@AE@% is negative%@NL@%
  6937. 1     0     ?     0     %@AB@%ST%@AE@% is 0%@NL@%
  6938. 1     1     ?     1     %@AB@%ST%@AE@% is not comparable (NAN or projective infinity)%@NL@%
  6939. %@NL@%
  6940. %@NL@%
  6941. %@CR:140       @%%@NL@%
  6942. %@3@%%@AB@%FUCOM/FUCOMP/FUCOMPP%@CR:FUCOM     @%%@AE@%%@EH@%%@QR:fucom@%%@QR:fucomp@%%@QR:fucompp@%%@NL@%
  6943. %@AB@%Unordered Compare%@AE@%%@QR:unordered compare@%%@QR:compare@%%@NL@%
  6944. %@AB@%80387 Only%@AE@%%@NL@%
  6945. %@NL@%
  6946. %@4@%Compares the specified source to %@AB@%ST%@AE@% and sets the condition%@EH@%
  6947. codes of the status word according to the result. The 
  6948. instruction works by subtracting the source operand from
  6949. %@AB@%ST%@AE@% without changing either operand. Memory operands are not
  6950. allowed. If no operand is specified or if two pops are specified,
  6951. %@AB@%ST%@AE@% is compared to %@AB@%ST(1)%@AE@%. If one pop is specified with an
  6952. operand, the given register is compared to %@AB@%ST%@AE@%.%@NL@%
  6953. %@NL@%
  6954. %@4@%%@AB@%FUCOM%@AE@% differs from %@AB@%FCOM%@AE@% in that it does not cause an invalid- %@EH@%
  6955. operation exception if one of the operands is a NAN. Instead,
  6956. the result is set to unordered.%@NL@%
  6957. %@NL@%
  6958. ────────────────┬─────────────────────────┬────────────────────────────────%@NL@%
  6959.                 │ fucom  st(2)            │  87   ─%@NL@%
  6960. %@AB@%FUCOM%@AE@%  «%@AI@%reg%@AE@%»    │ fucom                   │ 287   ─%@NL@%
  6961.                 │                         │ 387   24%@NL@%
  6962. ────────────────┼─────────────────────────┼────────────────────────────────%@NL@%
  6963.                 │ fucomp st(7)            │  87   ─%@NL@%
  6964. %@AB@%FUCOMP%@AE@%  «%@AI@%reg%@AE@%»   │ fucomp                  │ 287   ─%@NL@%
  6965.                 │                         │ 387   26%@NL@%
  6966. ────────────────┼─────────────────────────┼────────────────────────────────%@NL@%
  6967.                 │ fucompp                 │  87   ─%@NL@%
  6968. %@AB@%FUCOMPP%@AE@%         │                         │ 287   ─%@NL@%
  6969.                 │                         │ 387   26%@NL@%
  6970. ────────────────┴─────────────────────────┴────────────────────────────────%@NL@%
  6971. %@NL@%
  6972. %@AB@%Condition Codes for FUCOM%@AE@%%@NL@%
  6973. %@NL@%
  6974. %@AU@%C3%@AE@%    %@AU@%C2%@AE@%    %@AU@%C1%@AE@%    %@AU@%C0%@AE@%    %@AU@%Meaning%@AE@%%@NL@%
  6975. 0     0     ?     0     %@AB@%ST%@AE@% > source%@NL@%
  6976. 0     0     ?     1     %@AB@%ST%@AE@% < source%@NL@%
  6977. 1     0     ?     0     %@AB@%ST%@AE@% = source%@NL@%
  6978. 1     1     ?     1     Unordered%@NL@%
  6979. %@NL@%
  6980. %@NL@%
  6981. %@NL@%
  6982. %@3@%%@AB@%FWAIT%@CR:FWAIT     @%%@AE@%%@EH@%%@QR:fwait@%%@NL@%
  6983. %@AB@%Wait%@AE@%%@QR:wait@%%@NL@%
  6984. %@NL@%
  6985. %@4@%Suspends execution of the processor until the coprocessor%@EH@%
  6986. is finished executing. This is an alternate mnemonic for the 
  6987. processor %@AB@%WAIT%@AE@% instruction.%@NL@%
  6988. %@NL@%
  6989. ────────────────┬─────────────────────────┬────────────────────────────────%@NL@%
  6990.                 │ fwait                   │  87   4%@NL@%
  6991. %@AB@%FWAIT%@AE@%           │                         │ 287   3 %@NL@%
  6992.                 │                         │ 387   6%@NL@%
  6993. ────────────────┴─────────────────────────┴────────────────────────────────%@NL@%
  6994. %@NL@%
  6995. %@NL@%
  6996. %@CR:141       @%%@NL@%
  6997. %@3@%%@AB@%FXAM%@CR:FXAM      @%%@AE@%%@EH@%%@QR:fxam@%%@NL@%
  6998. %@AB@%Examine%@AE@%%@QR:examine@%%@NL@%
  6999. %@NL@%
  7000. %@4@%Reports the contents of %@AB@%ST%@AE@% in the condition flags of the%@EH@% 
  7001. status word.%@NL@%
  7002. %@NL@%
  7003. ────────────────┬─────────────────────────┬────────────────────────────────%@NL@%
  7004.                 │ fxam                    │  87   12-23%@NL@%
  7005. %@AB@%FXAM%@AE@%            │                         │ 287   12-23%@NL@%
  7006.                 │                         │ 387   30-38%@NL@%
  7007. ────────────────┴─────────────────────────┴────────────────────────────────%@NL@%
  7008. %@NL@%
  7009. %@AB@%Condition Codes for FXAM%@AE@%%@NL@%
  7010. %@NL@%
  7011. %@AU@%C3%@AE@%    %@AU@%C2%@AE@%    %@AU@%C1%@AE@%    %@AU@%C0%@AE@%    %@AU@%Interpretation%@AE@%%@NL@%
  7012. 0     0     0     0     + Unnormal%@FN@%
  7013. %@FC@%1. Not used on the 80387. Unnormals are not supported by the
  7014. %@FC@%80387. Also, the 80387 uses two codes instead of four to
  7015. %@FC@%identify empty registers.%@EF@%1%@NL@%
  7016. 0     0     0     1     + NAN%@NL@%
  7017. 0     0     1     0     - Unnormal%@FN@%
  7018. %@FC@%1. Not used on the 80387. Unnormals are not supported by the
  7019. %@FC@%80387. Also, the 80387 uses two codes instead of four to
  7020. %@FC@%identify empty registers.%@EF@%1%@NL@%
  7021. 0     0     1     1     - NAN%@NL@%
  7022. 0     1     0     0     + Normal%@NL@%
  7023. 0     1     0     1     + Infinity%@NL@%
  7024. 0     1     1     0     - Normal%@NL@%
  7025. 0     1     1     1     - Infinity%@NL@%
  7026. 1     0     0     0     + 0%@NL@%
  7027. 1     0     0     1     Empty%@NL@%
  7028. 1     0     1     0     - 0%@NL@%
  7029. 1     0     1     1     Empty%@NL@%
  7030. 1     1     0     0     + Denormal%@NL@%
  7031. 1     1     0     1     Empty%@FN@%
  7032. %@FC@%1. Not used on the 80387. Unnormals are not supported by the
  7033. %@FC@%80387. Also, the 80387 uses two codes instead of four to
  7034. %@FC@%identify empty registers.%@EF@%1%@NL@%
  7035. 1     1     1     0     - Denormal%@NL@%
  7036. 1     1     1     1     Empty%@FN@%
  7037. %@FC@%1. Not used on the 80387. Unnormals are not supported by the
  7038. %@FC@%80387. Also, the 80387 uses two codes instead of four to
  7039. %@FC@%identify empty registers.%@EF@%1%@NL@%
  7040. %@NL@%
  7041. %@NL@%
  7042. %@NL@%
  7043. %@3@%%@AB@%FXCH%@CR:FXCH      @%%@AE@%%@EH@%%@QR:fxch@%%@NL@%
  7044. %@AB@%Exchange Registers%@AE@%%@QR:exchange registers@%%@NL@%
  7045. %@NL@%
  7046. %@4@%Exchanges the specified (destination) register and %@AB@%ST%@AE@%. If no%@EH@% 
  7047. operand is specified, %@AB@%ST %@AE@%and %@AB@%ST(1)%@AE@% are exchanged.%@NL@%
  7048. %@NL@%
  7049. ────────────────┬─────────────────────────┬────────────────────────────────%@NL@%
  7050.                 │ fxch   st(3)            │  87   10-15%@NL@%
  7051. %@AB@%FXCH%@AE@%  «%@AI@%reg%@AE@%»     │ fxch                    │ 287   10-15%@NL@%
  7052.                 │                         │ 387   18%@NL@%
  7053. ────────────────┴─────────────────────────┴────────────────────────────────%@NL@%
  7054. %@NL@%
  7055. %@NL@%
  7056. %@CR:142       @%%@NL@%
  7057. %@3@%%@AB@%FXTRACT%@CR:FXTRACT   @%%@AE@%%@EH@%%@QR:fxtract@%%@NL@%
  7058. %@AB@%Extract Exponent and Significand%@AE@%%@QR:extract exponent@%%@QR:extract significand@%%@NL@%
  7059. %@NL@%
  7060. %@4@%Extracts the exponent and significand fields of %@AB@%ST%@AE@%. The%@EH@%
  7061. exponent replaces the value in %@AB@%ST%@AE@%, and then the significand 
  7062. is pushed onto the stack.%@NL@%
  7063. %@NL@%
  7064. ────────────────┬─────────────────────────┬────────────────────────────────%@NL@%
  7065.                 │ fxtract                 │  87   27-55%@NL@%
  7066. %@AB@%FXTRACT%@AE@%         │                         │ 287   27-55%@NL@%
  7067.                 │                         │ 387   70-76%@NL@%
  7068. ────────────────┴─────────────────────────┴────────────────────────────────%@NL@%
  7069. %@NL@%
  7070. %@NL@%
  7071. %@NL@%
  7072. %@3@%%@AB@%FYL2X%@CR:FYL2X     @%%@AE@%%@EH@%%@QR:fyl2x@%%@NL@%
  7073. %@AB@%Y log(sub2)(X)%@AE@%%@NL@%
  7074. %@NL@%
  7075. %@4@%Calculates Z = Y log(sub2)(X). X is taken from %@AB@%ST%@AE@% and Y from%@EH@%
  7076. %@AB@%ST(1)%@AE@%. The stack is popped and the result, Z, replaces Y
  7077. in %@AB@%ST%@AE@%. X must be in the range 0 < X < ∞ and Y in the
  7078. range -∞ < Y < ∞.%@NL@%
  7079. %@NL@%
  7080. ────────────────┬─────────────────────────┬────────────────────────────────%@NL@%
  7081.                 │ fyl2x                   │  87   900-1100%@NL@%
  7082. %@AB@%FYL2X%@AE@%           │                         │ 287   900-1100%@NL@%
  7083.                 │                         │ 387   120-538%@NL@%
  7084. ────────────────┴─────────────────────────┴────────────────────────────────%@NL@%
  7085. %@NL@%
  7086. %@NL@%
  7087. %@NL@%
  7088. %@3@%%@AB@%FYL2XP1%@CR:FYL2XP1   @%%@AE@%%@EH@%%@QR:fyl2xp1@%%@NL@%
  7089. %@AB@%Y log(sub2)(X+1)%@AE@%%@NL@%
  7090. %@NL@%
  7091. %@4@%Calculates Z = Y log(sub2)(X + 1). X is taken from %@AB@%ST%@AE@% and Y%@EH@%
  7092. from %@AB@%ST(1)%@AE@%. The stack is popped once and the result, Z, replaces 
  7093. Y in %@AB@%ST%@AE@%. X must be in the range 0 ≤ |X| < (1 - (√2 / 2). Y 
  7094. must be in the range -∞ < Y < ∞.%@NL@%
  7095. %@NL@%
  7096. ────────────────┬─────────────────────────┬────────────────────────────────%@NL@%
  7097.                 │ fyl2xp                  │  87   700-1000%@NL@%
  7098. %@AB@%FYL2XP1%@AE@%         │                         │ 287   700-1000%@NL@%
  7099.                 │                         │ 387   257-547%@NL@%
  7100. ────────────────┴─────────────────────────┴────────────────────────────────%@NL@%
  7101. %@NL@%
  7102. %@NL@%
  7103. %@CR:143a      @%%@NL@%
  7104. %@1@%%@AB@%Tables%@CR:Tables    @%%@AE@%%@EH@%%@NL@%
  7105. %@NL@%
  7106. ───────────────────────────────────────────────────────────────────────────%@NL@%
  7107. %@NL@%
  7108. DOS Program Segment Prefix (PSP)%@BO:     6a4c9@%%@NL@%
  7109. %@NL@%
  7110. ASCII Chart%@BO:     6bcac@%%@NL@%
  7111. %@NL@%
  7112. Key Codes%@BO:     6e205@%%@NL@%
  7113. %@NL@%
  7114. Color Display Attributes%@BO:     7101a@%%@NL@%
  7115. %@NL@%
  7116. Hexadecimal-Binary-Decimal Conversion%@BO:     717aa@%%@NL@%
  7117. %@NL@%
  7118. %@NL@%
  7119. %@CR:143b      @%%@NL@%
  7120. %@2@%%@AB@%DOS Program Segment Prefix (PSP)%@CR:PSP       @%%@AE@%%@EH@%%@QR:dos program segment prefix@%%@QR:program segment prefix@%%@QR:psp@%%@NL@%
  7121. ───────────────────────────────────────────────────────────────────────────%@NL@%
  7122. %@NL@%
  7123.             O  1  2  3  4  5  6  7  8  9  A  B  C  D  E  F%@NL@%
  7124.           ┌─────┬─────┬───┬──────────────┬─────┬─────┬─────┐%@NL@%
  7125.       00h │ %@FN@%
  7126. %@FC@%1. Opcode for INT 20h
  7127. %@FC@%2. Segment of first allocatable address following the program
  7128. %@FC@%(useful for memory allocation)
  7129. %@FC@%3. Reserved or used by DOS
  7130. %@FC@%4. Opcode for far call to DOS function dispatcher
  7131. %@FC@%5. Vector for terminate routine
  7132. %@FC@%6. Vector for CTRL+BREAK routine%@EF@%1  │ %@FN@%
  7133. %@FC@%1. Opcode for INT 20h
  7134. %@FC@%2. Segment of first allocatable address following the program
  7135. %@FC@%(useful for memory allocation)
  7136. %@FC@%3. Reserved or used by DOS
  7137. %@FC@%4. Opcode for far call to DOS function dispatcher
  7138. %@FC@%5. Vector for terminate routine
  7139. %@FC@%6. Vector for CTRL+BREAK routine%@EF@%2  │%@FN@%
  7140. %@FC@%1. Opcode for INT 20h
  7141. %@FC@%2. Segment of first allocatable address following the program
  7142. %@FC@%(useful for memory allocation)
  7143. %@FC@%3. Reserved or used by DOS
  7144. %@FC@%4. Opcode for far call to DOS function dispatcher
  7145. %@FC@%5. Vector for terminate routine
  7146. %@FC@%6. Vector for CTRL+BREAK routine%@EF@%3 │     %@FN@%
  7147. %@FC@%1. Opcode for INT 20h
  7148. %@FC@%2. Segment of first allocatable address following the program
  7149. %@FC@%(useful for memory allocation)
  7150. %@FC@%3. Reserved or used by DOS
  7151. %@FC@%4. Opcode for far call to DOS function dispatcher
  7152. %@FC@%5. Vector for terminate routine
  7153. %@FC@%6. Vector for CTRL+BREAK routine%@EF@%4       │ IP %@FN@%
  7154. %@FC@%1. Opcode for INT 20h
  7155. %@FC@%2. Segment of first allocatable address following the program
  7156. %@FC@%(useful for memory allocation)
  7157. %@FC@%3. Reserved or used by DOS
  7158. %@FC@%4. Opcode for far call to DOS function dispatcher
  7159. %@FC@%5. Vector for terminate routine
  7160. %@FC@%6. Vector for CTRL+BREAK routine%@EF@%5 CS  │IP%@FN@%
  7161. %@FC@%1. Opcode for INT 20h
  7162. %@FC@%2. Segment of first allocatable address following the program
  7163. %@FC@%(useful for memory allocation)
  7164. %@FC@%3. Reserved or used by DOS
  7165. %@FC@%4. Opcode for far call to DOS function dispatcher
  7166. %@FC@%5. Vector for terminate routine
  7167. %@FC@%6. Vector for CTRL+BREAK routine%@EF@%6 │%@NL@%
  7168.           ├─────┼─────┼───┴──┬───────────┴─────┴─────┴─────┤%@NL@%
  7169.       10h │CS%@FN@%
  7170. %@FC@%6. Vector for CTRL+BREAK routine
  7171. %@FC@%7. Vector for error routine%@EF@%6 │ IP %@FN@%
  7172. %@FC@%6. Vector for CTRL+BREAK routine
  7173. %@FC@%7. Vector for error routine%@EF@%7  CS  │                             │%@NL@%
  7174.           ├─────┴─────┴──────┘                 ┌─────┐     │%@NL@%
  7175.       20h │                                    │  %@FN@%
  7176. %@FC@%8. Segment of program's copy of the environment%@EF@%8 │     │%@NL@%
  7177.           │                                    └─────┘     │%@NL@%
  7178.       30h │                                                │%@NL@%
  7179.           │                          %@FN@%
  7180. %@FC@%3. Reserved or used by DOS%@EF@%3                    │%@NL@%
  7181.       40h │                                                │%@NL@%
  7182.           ├──────────────────┐                 ┌───────────┤%@NL@%
  7183.       50h │       %@FN@%
  7184. %@FC@%9.  Opcode for DOS INT 21h and far return (you can do a far call
  7185. %@FC@%to this address to execute DOS calls)
  7186. %@FC@%10. First command-line argument (formatted as uppercase 11-character
  7187. %@FC@%file name)%@EF@%9         │                 │    %@FN@%
  7188. %@FC@%9.  Opcode for DOS INT 21h and far return (you can do a far call
  7189. %@FC@%to this address to execute DOS calls)
  7190. %@FC@%10. First command-line argument (formatted as uppercase 11-character
  7191. %@FC@%file name)%@EF@%10    │%@NL@%
  7192.           ├──────────────────┴─────────────────┼───────────┤%@NL@%
  7193.       60h │                 %@FN@%
  7194. %@FC@%10. First command-line argument (formatted as uppercase 11-character
  7195. %@FC@%file name)
  7196. %@FC@%11. Second command-line argument (formatted as uppercase 11-character
  7197. %@FC@%file name)%@EF@%10                │    %@FN@%
  7198. %@FC@%10. First command-line argument (formatted as uppercase 11-character
  7199. %@FC@%file name)
  7200. %@FC@%11. Second command-line argument (formatted as uppercase 11-character
  7201. %@FC@%file name)%@EF@%11    │%@NL@%
  7202.           ├────────────────────────────────────┼───────────┤%@NL@%
  7203.       70h │                 %@FN@%
  7204. %@FC@%3.  Opcode for far call to DOS function dispatcher
  7205. %@FC@%11. Second command-line argument (formatted as uppercase 11-character
  7206. %@FC@%file name)%@EF@%11                │    %@FN@%
  7207. %@FC@%3.  Opcode for far call to DOS function dispatcher
  7208. %@FC@%11. Second command-line argument (formatted as uppercase 11-character
  7209. %@FC@%file name)%@EF@%3     │%@NL@%
  7210.           ├────┬───────────────────────────────┴───────────┤%@NL@%
  7211.       80h │%@FN@%
  7212. %@FC@%12. Number of bytes in command line argument
  7213. %@FC@%13. Unformatted command line and/or default Disk Transfer Area (DTA)%@EF@%12 │            %@FN@%
  7214. %@FC@%12. Number of bytes in command line argument
  7215. %@FC@%13. Unformatted command line and/or default Disk Transfer Area (DTA)%@EF@%13                            │%@NL@%
  7216.           ├────┘                                           │%@NL@%
  7217.       90h │                                                │%@NL@%
  7218.           │                                                │%@NL@%
  7219.       A0h │                                                │%@NL@%
  7220.           │                                                │%@NL@%
  7221.       B0h │                                                │%@NL@%
  7222.           │                                                │%@NL@%
  7223.       C0h │                                                │%@NL@%
  7224.           │                                                │%@NL@%
  7225.       D0h │                                                │%@NL@%
  7226.           │                                                │%@NL@%
  7227.       E0h │                                                │%@NL@%
  7228.           │                                                │%@NL@%
  7229.       F0h │                                                │%@NL@%
  7230.           └────────────────────────────────────────────────┘%@NL@%
  7231. %@NL@%
  7232. %@NL@%
  7233. %@CR:144       @%%@NL@%
  7234. %@2@%%@AB@%ASCII Codes%@CR:ASCII Code@%%@AE@%%@EH@%%@QR:ascii codes@%%@QR:ascii@%%@NL@%
  7235. %@NL@%
  7236. %@TH: 259  9397 01 12 9 10 13 26 6 @%  %@AB@%Char      Dec #    Hex #     Control                                Ctrl%@AE@%┌────────┬─────────────────┬────────────┬───────────────────────────┬─────┐│        │   0       00    │   NUL      │   (Null)                  │ ^@  ││        │   1       01    │   SOH      │   (Start of heading)      │ ^A  ││        │   2       02    │   STX      │   (Start of text)         │ ^B  ││        │   3       03    │   ETX      │   (End of text)           │ ^C  ││        │   4       04    │   EOT      │   (End of transmission)   │ ^D  ││        │   5       05    │   ENQ      │   (Enquiry)               │ ^E  ││        │   6       06    │   ACK      │   (Acknowledge)           │ ^F  ││        │   7       07    │   BEL      │   (Bell)                  │ ^G  ││        │   8       08    │   BS       │   (Backspace)             │ ^H  ││        │   9       09    │   HT       │   (Horizontal tab)        │ ^I  ││        │  10       0A    │   LF       │   (Linefeed)              │ ^J  ││        │  11       0B    │   VT       │   (Vertical tab)          │ ^K  ││        │  12       0C    │   FF       │   (Formfeed)              │ ^L  ││        │  13       0D    │   CR       │   (Carriage return)       │ ^M  ││        │  14       0E    │   SO       │   (Shift out)             │ ^N  ││        │  15       0F    │   SI       │   (Shift in)              │ ^O  ││        │  16       10    │   DLE      │   (Data link escape)      │ ^P  ││        │  17       11    │   DC1      │   (Device control 1)      │ ^Q  ││        │  18       12    │   DC2      │   (Device control 2)      │ ^R  ││        │  19       13    │   DC3      │   (Device control 3)      │ ^S  ││        │  20       14    │   DC4      │   (Device control 4)      │ ^T  ││        │  21       15    │   NAK      │   (Negative acknowledge)  │ ^U  ││        │  22       16    │   SYN      │   (Synchronous idle)      │ ^V  ││        │  23       17    │   ETB      │   (End transmission block)│ ^W  ││        │  24       18    │   CAN      │   (Cancel)                │ ^X  ││        │  25       19    │   EM       │   (End of medium)         │ ^Y  ││        │  26       1A    │   SUB      │   (Substitute)            │ ^Z  ││        │  27       1B    │   ESC      │   (Escape)                │ ^[  ││        │  28       1C    │   FS       │   (File separator)        │ ^\  ││        │  29       1D    │   GS       │   (Group separator)       │ ^]  ││        │  30       1E    │   RS       │   (Record separator)      │ ^^  ││        │  31       1F    │   US       │   (Unit separator)        │ ^_  ││ <space>│  32       20    │────────────┴───────────────────────────┴─────┘│ !      │  33       21    ││ "      │  34       22    ││ #      │  35       23    ││ $      │  36       24    ││ %      │  37       25    ││ &      │  38       26    ││ '      │  39       27    ││ (      │  40       28    ││ )      │  41       29    ││ *      │  42       2A    ││ +      │  43       2B    ││ ,      │  44       2C    ││ -      │  45       2D    ││ .      │  46       2E    ││ /      │  47       2F    ││ 0      │  48       30    ││ 1      │  49       31    ││ 2      │  50       32    ││ 3      │  51       33    ││ 4      │  52       34    ││ 5      │  53       35    ││ 6      │  54       36    ││ 7      │  55       37    ││ 8      │  56       38    ││ 9      │  57       39    ││ :      │  58       3A    ││ ;      │  59       3B    ││ <      │  60       3C    ││ =      │  61       3D    ││ >      │  62       3E    ││ ?      │  63       3F    ││ @      │  64       40    ││ A      │  65       41    ││ B      │  66       42    ││ C      │  67       43    ││ D      │  68       44    ││ E      │  69       45    ││ F      │  70       46    ││ G      │  71       47    ││ H      │  72       48    ││ I      │  73       49    ││ J      │  74       4A    ││ K      │  75       4B    ││ L      │  76       4C    ││ M      │  77       4D    ││ N      │  78       4E    ││ O      │  79       4F    ││ P      │  80       50    ││ Q      │  81       51    ││ R      │  82       52    ││ S      │  83       53    ││ T      │  84       54    ││ U      │  85       55    ││ V      │  86       56    ││ W      │  87       57    ││ X      │  88       58    ││ Y      │  89       59    ││ Z      │  90       5A    ││ [      │  91       5B    ││ \      │  92       5C    ││ ]      │  93       5D    ││ ^      │  94       5E    ││ _      │  95       5F    ││ `      │  96       60    ││ a      │  97       61    ││ b      │  98       62    ││ c      │  99       63    ││ d      │ 100       64    ││ e      │ 101       65    ││ f      │ 102       66    ││ g      │ 103       67    ││ h      │ 104       68    ││ i      │ 105       69    ││ j      │ 106       6A    ││ k      │ 107       6B    ││ l      │ 108       6C    ││ m      │ 109       6D    ││ n      │ 110       6E    ││ o      │ 111       6F    ││ p      │ 112       70    ││ q      │ 113       71    ││ r      │ 114       72    ││ s      │ 115       73    ││ t      │ 116       74    ││ u      │ 117       75    ││ v      │ 118       76    ││ w      │ 119       77    ││ x      │ 120       78    ││ y      │ 121       79    ││ z      │ 122       7A    ││ {      │ 123       7B    ││ |      │ 124       7C    ││ }      │ 125       7D    ││ ~      │ 126       7E    ││        │ 127%@FN@%%@FC@%1. ASCII code 127 has the code DEL. Under DOS, this code has%@FC@%the same effect as ASCII 8 (BS). The DEL code can be generated%@FC@%by the CTRL-BKSP key.%@EF@%1     7F    │%@CR:145       @%│ Ç      │ 128       80    ││ ü      │ 129       81    ││ é      │ 130       82    ││ â      │ 131       83    ││ ä      │ 132       84    ││ à      │ 133       85    ││ å      │ 134       86    ││ ç      │ 135       87    ││ ê      │ 136       88    ││ ë      │ 137       89    ││ è      │ 138       8A    ││ ï      │ 139       8B    ││ î      │ 140       8C    ││ ì      │ 141       8D    ││ Ä      │ 142       8E    ││ Å      │ 143       8F    ││ É      │ 144       90    ││ æ      │ 145       91    ││ Æ      │ 146       92    ││ ô      │ 147       93    ││ ö      │ 148       94    ││ ò      │ 149       95    ││ û      │ 150       96    ││ ù      │ 151       97    ││ ÿ      │ 151       98    ││ Ö      │ 152       99    ││ Ü      │ 154       9A    ││ ¢      │ 155       9B    ││ £      │ 156       9C    ││ ¥      │ 157       9D    ││ ₧      │ 158       9E    ││ ƒ      │ 159       9F    ││ á      │ 160       A0    ││ í      │ 161       A1    ││ ó      │ 162       A2    ││ ú      │ 163       A3    ││ ñ      │ 164       A4    ││ Ñ      │ 165       A5    ││ ª      │ 166       A6    ││ º      │ 167       A7    ││ ¿      │ 168       A8    ││ ⌐      │ 169       A9    ││ ¬      │ 170       AA    ││ ½      │ 171       AB    ││ ¼      │ 172       AC    ││ ¡      │ 173       AD    ││ «      │ 174       AE    ││ »      │ 175       AF    ││ ░      │ 176       B0    ││ ▒      │ 177       B1    ││ ▓      │ 178       B2    ││ │      │ 179       B3    ││ ┤      │ 180       B4    ││ ╡      │ 181       B5    ││ ╢      │ 182       B6    ││ ╖      │ 183       B7    ││ ╕      │ 184       B8    ││ ╣      │ 185       B9    ││ ║      │ 186       BA    ││ ╗      │ 187       BB    ││ ╝      │ 188       BC    ││ ╜      │ 189       BD    ││ ╛      │ 190       BE    ││ ┐      │ 191       BF    ││ └      │ 192       C0    ││ ┴      │ 193       C1    ││ ┬      │ 194       C2    ││ ├      │ 195       C3    ││ ─      │ 196       C4    ││ ┼      │ 197       C5    ││ ╞      │ 198       C6    ││ ╟      │ 199       C7    ││ ╚      │ 200       C8    ││ ╔      │ 201       C9    ││ ╩      │ 202       CA    ││ ╦      │ 203       CB    ││ ╠      │ 204       CC    ││ ═      │ 205       CD    ││ ╬      │ 206       CE    ││ ╧      │ 207       CF    ││ ╨      │ 208       D0    ││ ╤      │ 209       D1    ││ ╥      │ 210       D2    ││ ╙      │ 211       D3    ││ ╘      │ 212       D4    ││ ╒      │ 213       D5    ││ ╓      │ 214       D6    ││ ╫      │ 215       D7    ││ ╪      │ 216       D8    ││ ┘      │ 217       D9    ││ ┌      │ 218       DA    ││ █      │ 219       DB    ││ ▄      │ 220       DC    ││ ▌      │ 221       DD    ││ ▐      │ 222       DE    ││ ▀      │ 223       DF    ││ α      │ 224       E0    ││ ß      │ 225       E1    ││ Γ      │ 226       E2    ││ π      │ 227       E3    ││ Σ      │ 228       E4    ││ σ      │ 229       E5    ││ µ      │ 230       E6    ││ τ      │ 231       E7    ││ Φ      │ 232       E8    ││ Θ      │ 233       E9    ││ Ω      │ 234       EA    ││ δ      │ 235       EB    ││ ∞      │ 236       EC    ││ φ      │ 237       ED    ││ ε      │ 238       EE    ││ ∩      │ 239       EF    ││ ≡      │ 240       F0    ││ ±      │ 241       F1    ││ ≥      │ 242       F2    ││ ≤      │ 243       F3    ││ ⌠      │ 244       F4    ││ ⌡      │ 245       F5    ││ ÷      │ 246       F6    ││ ≈      │ 247       F7    ││ °      │ 248       F8    ││ ∙      │ 249       F9    ││ ·      │ 250       FA    ││ √      │ 251       FB    ││ ⁿ      │ 252       FC    ││ ²      │ 253       FD    ││ ■      │ 254       FE    ││        │ 255       FF    │└────────┴─────────────────┘%@TE: 259  9397 01 12 9 10 13 26 6 @%
  7237. %@NL@%
  7238. %@CR:146       @%%@NL@%
  7239. %@2@%%@AB@%Key Codes%@CR:Key Codes @%%@AE@%%@EH@%%@QR:key codes@%%@QR:key code@%%@QR:scan codes@%%@QR:scan code@%%@QR:keyboard scan@%%@NL@%
  7240. %@NL@%
  7241. %@TH: 100 11579 06 12 11 17 17 17 17 @%┌─────────┬──────────┬────────────────┬────────────────┬────────────────┬────────────────┐│         │          │                │   %@AB@%ASCII or%@AE@%     │   %@AB@%ASCII or%@AE@%     │   %@AB@%ASCII or%@AE@%     ││         │   %@AB@%Scan%@AE@%   │   %@AB@%ASCII or%@AE@%     │   %@AB@%Extended%@AE@%%@FN@%%@FC@%1. Extended codes return NUL (ASCII 0) as the initial character.%@FC@%This is a signal that a second (extended) code is available in %@FC@%the keystroke buffer.%@EF@%1   │   %@AB@%Extended%@AE@%%@FN@%%@FC@%1. Extended codes return NUL (ASCII 0) as the initial character.%@FC@%This is a signal that a second (extended) code is available in %@FC@%the keystroke buffer.%@EF@%1   │   %@AB@%Extended%@AE@%%@FN@%%@FC@%1. Extended codes return NUL (ASCII 0) as the initial character.%@FC@%This is a signal that a second (extended) code is available in %@FC@%the keystroke buffer.%@EF@%1   ││ %@AB@%Key%@AE@%     │   %@AB@%Code%@AE@%   │   %@AB@%Extended%@AE@%%@FN@%%@FC@%1. Extended codes return NUL (ASCII 0) as the initial character.%@FC@%This is a signal that a second (extended) code is available in %@FC@%the keystroke buffer.%@EF@%1   │   %@AB@%with Shift%@AE@%   │   %@AB@%with Ctrl%@AE@%    │   %@AB@%with Alt%@AE@%     │├─────────┼──────────┼────────────────┼────────────────┼────────────────┼────────────────┤│         │ %@AB@%Dec  Hex %@AE@%│ %@AB@%Dec  Hex  Char %@AE@%│ %@AB@%Dec  Hex  Char %@AE@%│ %@AB@%Dec  Hex  Char %@AE@%│ %@AB@%Dec  Hex  Char %@AE@%│├─────────┼──────────┼────────────────┼────────────────┼────────────────┼────────────────┤│ ESC     │   1  01  │  27  1B        │  27  1B        │  27  1B        │                ││ 1 !     │   2  02  │  49  31   %@AB@%1%@AE@%    │  33  21   %@AB@%!%@AE@%    │                │ 120  78   NUL  ││ 2 @     │   3  03  │  50  32   %@AB@%2%@AE@%    │  64  40   %@AB@%@%@AE@%    │   3  03   NUL  │ 121  79   NUL  ││ 3 #     │   4  04  │  51  33   %@AB@%3%@AE@%    │  35  23   %@AB@%#%@AE@%    │                │ 122  7A   NUL  ││ 4 $     │   5  05  │  52  34   %@AB@%4%@AE@%    │  36  24   %@AB@%$%@AE@%    │                │ 123  7B   NUL  ││ 5 %     │   6  06  │  53  35   %@AB@%5%@AE@%    │  37  25   %@AB@%%%@AE@%    │                │ 124  7C   NUL  ││ 6 ^     │   7  07  │  54  36   %@AB@%6%@AE@%    │  94  5E   %@AB@%^%@AE@%    │  30  1E        │ 125  7D   NUL  ││ 7 &     │   8  08  │  55  37   %@AB@%7%@AE@%    │  38  26   %@AB@%&%@AE@%    │                │ 126  7E   NUL  ││ 8 *     │   9  09  │  56  38   %@AB@%8%@AE@%    │  42  2A   %@AB@%*%@AE@%    │                │ 127  7F   NUL  ││ 9 (     │  10  0A  │  57  39   %@AB@%9%@AE@%    │  40  28   %@AB@%(%@AE@%    │                │ 128  80   NUL  ││ 0 )     │  11  0B  │  48  30   %@AB@%0%@AE@%    │  41  29   %@AB@%)%@AE@%    │                │ 129  81   NUL  ││ - _     │  12  0C  │  45  2D   %@AB@%-%@AE@%    │  95  5F   %@AB@%-%@AE@%    │  31  1F        │ 130  82   NUL  ││ = +     │  13  0D  │  61  3D   %@AB@%=%@AE@%    │  43  2B   %@AB@%+%@AE@%    │                │ 131  83   NUL  ││         │          │                │                │                │                ││ BKSP    │  14  0E  │   8  08        │   8  08        │ 127  7F        │                ││ TAB     │  15  0F  │   9  09        │  15  0F   NUL  │                │                ││ Q       │  16  10  │ 113  71   %@AB@%q%@AE@%    │  81  51   %@AB@%Q%@AE@%    │  17  11        │  16  10   NUL  ││ W       │  17  11  │ 119  77   %@AB@%w%@AE@%    │  87  57   %@AB@%W%@AE@%    │  23  17        │  17  11   NUL  ││ E       │  18  12  │ 101  65   %@AB@%e%@AE@%    │  69  45   %@AB@%E%@AE@%    │   5  05        │  18  12   NUL  ││ R       │  19  13  │ 114  72   %@AB@%r%@AE@%    │  82  52   %@AB@%R%@AE@%    │  18  12        │  19  13   NUL  ││ T       │  20  14  │ 116  74   %@AB@%t%@AE@%    │  84  54   %@AB@%T%@AE@%    │  20  14        │  20  14   NUL  ││ Y       │  21  15  │ 121  79   %@AB@%y%@AE@%    │  89  59   %@AB@%Y%@AE@%    │  25  19        │  21  15   NUL  ││ U       │  22  16  │ 117  75   %@AB@%u%@AE@%    │  85  55   %@AB@%U%@AE@%    │  21  15        │  22  16   NUL  ││ I       │  23  17  │ 105  69   %@AB@%i%@AE@%    │  73  49   %@AB@%I%@AE@%    │   9  09        │  23  17   NUL  ││ O       │  24  18  │ 111  6F   %@AB@%o%@AE@%    │  79  4F   %@AB@%O%@AE@%    │  15  0F        │  24  18   NUL  ││ P       │  25  19  │ 112  70   %@AB@%p%@AE@%    │  80  50   %@AB@%P%@AE@%    │  16  10        │  25  19   NUL  ││ [ {     │  26  1A  │  91  5B   %@AB@%[%@AE@%    │ 123  7B   %@AB@%{%@AE@%    │  27  1B        │                ││ ] }     │  27  1B  │  93  5D   %@AB@%]%@AE@%    │ 125  7D   %@AB@%}%@AE@%    │  29  1D        │                ││         │          │                │                │                │                ││ ENTER   │  28  1C  │  13  0D   CR   │  13  0D   CR   │  10  0A   LF   │                ││ CTRL    │  29  1D  │                │                │                │                ││         │          │                │                │                │                ││ A       │  30  1E  │  97  61   %@AB@%a%@AE@%    │  65  41   %@AB@%A%@AE@%    │   1  01        │  30  1E   NUL  ││ S       │  31  1F  │ 115  73   %@AB@%s%@AE@%    │  83  53   %@AB@%S%@AE@%    │  19  13        │  31  1F   NUL  ││ D       │  32  20  │ 100  64   %@AB@%d%@AE@%    │  68  44   %@AB@%D%@AE@%    │   4  04        │  32  20   NUL  ││ F       │  33  21  │ 102  66   %@AB@%f%@AE@%    │  70  46   %@AB@%F%@AE@%    │   6  06        │  33  21   NUL  ││ G       │  34  22  │ 103  67   %@AB@%g%@AE@%    │  71  47   %@AB@%G%@AE@%    │   7  07        │  34  22   NUL  ││ H       │  35  23  │ 104  68   %@AB@%h%@AE@%    │  72  48   %@AB@%H%@AE@%    │   8  08        │  35  23   NUL  ││ J       │  36  24  │ 106  6A   %@AB@%j%@AE@%    │  74  4A   %@AB@%J%@AE@%    │  10  0A        │  36  24   NUL  ││ K       │  37  25  │ 107  6B   %@AB@%k%@AE@%    │  75  4B   %@AB@%K%@AE@%    │  11  0B        │  37  25   NUL  ││ L       │  38  26  │ 108  6C   %@AB@%l%@AE@%    │  76  4C   %@AB@%L%@AE@%    │  12  0C        │  38  26   NUL  ││ ; :     │  39  27  │  59  3B   %@AB@%;%@AE@%    │  58  3A   %@AB@%:%@AE@%    │                │                ││ ' "     │  40  28  │  39  27   %@AB@%'%@AE@%    │  34  22   %@AB@%"%@AE@%    │                │                ││ ` ~     │  41  29  │  96  60   %@AB@%`%@AE@%    │ 126  7E   %@AB@%~%@AE@%    │                │                │%@CR:147       @%│ L SHIFT │  42  2A  │                │                │                │                ││ \ |     │  43  2B  │  92  5C   %@AB@%\%@AE@%    │ 124  7C   %@AB@%|%@AE@%    │  28  1C        │                ││ Z       │  44  2C  │ 122  7A   %@AB@%z%@AE@%    │  90  5A   %@AB@%Z%@AE@%    │  26  1A        │  44  2C   NUL  ││ X       │  45  2D  │ 120  78   %@AB@%x%@AE@%    │  88  58   %@AB@%X%@AE@%    │  24  18        │  45  2D   NUL  ││ C       │  46  2E  │  99  63   %@AB@%c%@AE@%    │  67  43   %@AB@%C%@AE@%    │   3  03        │  46  2E   NUL  ││ V       │  47  2F  │ 118  76   %@AB@%v%@AE@%    │  86  56   %@AB@%V%@AE@%    │  22  16        │  47  2F   NUL  ││ B       │  48  30  │  98  62   %@AB@%b%@AE@%    │  66  42   %@AB@%B%@AE@%    │   2  02        │  48  30   NUL  ││ N       │  49  31  │ 110  6E   %@AB@%n%@AE@%    │  78  4E   %@AB@%N%@AE@%    │  14  0E        │  49  31   NUL  ││ M       │  50  32  │ 109  6D   %@AB@%m%@AE@%    │  77  4D   %@AB@%M%@AE@%    │  13  0D        │  50  32   NUL  ││ , <     │  51  33  │  44  2C   %@AB@%,%@AE@%    │  60  3C   %@AB@%<%@AE@%    │                │                ││ . >     │  52  34  │  46  2E   %@AB@%.%@AE@%    │  62  3E   %@AB@%>%@AE@%    │                │                ││ / ?     │  53  35  │  47  2F   %@AB@%/%@AE@%    │  63  3F   %@AB@%?%@AE@%    │                │                ││         │          │                │                │                │                ││ R SHIFT │  54  36  │                │                │                │                ││ * PRTSC │  55  37  │  42  2A   *    │      INT  5%@FN@%%@FC@%2. Under DOS, Shift-PtrScr causes interrupt 5, which prints the screen %@FC@%unless an interrupt handler has been defined to replace the default%@FC@%interrupt 5 handler.%@EF@%2  │  16  10        │                ││ ALT     │  56  38  │                │                │                │                ││ SPACE   │  57  39  │  32  20   SPC  │  32  20   SPC  │  32  20   SPC  │  32  20   SPC  ││ CAPS    │  58  3A  │                │                │                │                ││         │          │                │                │                │                ││ F1      │  59  3B  │  59  3B   NUL  │  84  54   NUL  │  94  5E   NUL  │ 104  68   NUL  ││ F2      │  60  3C  │  60  3C   NUL  │  85  55   NUL  │  95  5F   NUL  │ 105  69   NUL  ││ F3      │  61  3D  │  61  3D   NUL  │  86  56   NUL  │  96  60   NUL  │ 106  6A   NUL  ││ F4      │  62  3E  │  62  3E   NUL  │  87  57   NUL  │  97  61   NUL  │ 107  6B   NUL  ││ F5      │  63  3F  │  63  3F   NUL  │  88  58   NUL  │  98  62   NUL  │ 108  6C   NUL  ││ F6      │  64  40  │  64  40   NUL  │  89  59   NUL  │  99  63   NUL  │ 109  6D   NUL  ││ F7      │  65  41  │  65  41   NUL  │  90  5A   NUL  │ 100  64   NUL  │ 110  6E   NUL  ││ F8      │  66  42  │  66  46   NUL  │  91  5B   NUL  │ 101  65   NUL  │ 111  6F   NUL  ││ F9      │  67  43  │  67  43   NUL  │  92  5C   NUL  │ 102  66   NUL  │ 112  70   NUL  ││ F10     │  68  44  │  68  44   NUL  │  93  5D   NUL  │ 103  67   NUL  │ 113  71   NUL  ││         │          │                │                │                │                ││ NUM     │  69  45  │                │                │                │                ││ SCROLL  │  70  46  │                │                │                │                ││         │          │                │                │                │                ││ HOME    │  71  47  │  71  47   NUL  │  55  37   %@AB@%7%@AE@%    │ 119  77   NUL  │                ││ UP      │  72  48  │  72  48   NUL  │  56  38   %@AB@%8%@AE@%    │                │                ││ PGUP    │  73  49  │  73  49   NUL  │  57  39   %@AB@%9%@AE@%    │ 132  84   NUL  │                ││ GREY -  │  74  4A  │  45  2D   -    │  45  2D   %@AB@%-%@AE@%    │                │                ││         │          │                │                │                │                ││ LEFT    │  75  4B  │  75  4B   NUL  │  52  34   %@AB@%4%@AE@%    │ 115  73   NUL  │                ││ CENTER  │  76  4C  │                │  53  35   %@AB@%5%@AE@%    │                │                ││ RIGHT   │  77  4D  │  77  4D   NUL  │  54  36   %@AB@%6%@AE@%    │ 116  74   NUL  │                ││ GREY +  │  78  4E  │  43  2B   +    │  43  2B   %@AB@%+%@AE@%    │                │                ││ END     │  79  4F  │  79  4F   NUL  │  49  31   %@AB@%1%@AE@%    │ 117  75   NUL  │                ││ DOWN    │  80  50  │  80  50   NUL  │  50  32   %@AB@%2%@AE@%    │                │                ││ PGDN    │  81  51  │  81  51   NUL  │  51  33   %@AB@%3%@AE@%    │ 118  76   NUL  │                ││         │          │                │                │                │                ││ INS     │  82  52  │  82  52   NUL  │  48  30   %@AB@%0%@AE@%    │                │                ││ DEL     │  83  53  │  83  53   NUL  │  46  2E   %@AB@%.%@AE@%    │                │                │└─────────┴──────────┴────────────────┴────────────────┴────────────────┴────────────────┘%@TE: 100 11579 06 12 11 17 17 17 17 @%
  7242. %@NL@%
  7243. %@CR:148       @%%@NL@%
  7244. %@2@%%@AB@%Color Display Attributes%@CR:Color Disp@%%@AE@%%@EH@%%@QR:color display attributes@%%@QR:color attributes@%%@QR:color@%%@QR:display attribute@%%@NL@%
  7245. %@NL@%
  7246. %@TH:  21  1617 04 35 41 @%%@AB@%Background                         Foreground%@AE@%%@AB@%Bits%@AE@%          %@AB@%Num%@AE@%  %@AB@%Color%@AE@%           %@AB@%Bits%@AE@%%@FN@%%@FC@%1. On monochrome monitors, the blue bit is set and the red and%@FC@%green bits are cleared (001) for underline; all color bits are%@FC@%set (111) for normal text.%@EF@%1        %@AB@%Num%@AE@%  %@AB@%Color%@AE@%───────────────────────────────────────────────────────────────────────────%@AU@%F%@AE@%  %@AU@%R%@AE@%  %@AU@%G%@AE@%  %@AU@%B%@AE@%                         %@AU@%I%@AE@%  %@AU@%R%@AE@%  %@AU@%G%@AE@%  %@AU@%B%@AE@%0  0  0  0    0    Black           0  0  0  0    0    Black0  0  0  1    1    Blue            0  0  0  1    1    Blue0  0  1  0    2    Green           0  0  1  0    2    Green0  0  1  1    3    Cyan            0  0  1  1    3    Cyan0  1  0  0    4    Red             0  1  0  0    4    Red0  1  0  1    5    Magenta         0  1  0  1    5    Magenta0  1  1  0    6    Brown           0  1  1  0    6    Brown0  1  1  1    7    White           0  1  1  1    7    White1  0  0  0    8    Black blink     1  0  0  0    8    Dark grey1  0  0  1    9    Blue blink      1  0  0  1    9    Light blue1  0  1  0    A    Green blink     1  0  1  0    A    Light green1  0  1  1    B    Cyan blink      1  0  1  1    B    Light cyan1  1  0  0    C    Red blink       1  1  0  0    C    Light red1  1  0  1    D    Magenta blink   1  1  0  1    D    Light magenta1  1  1  0    E    Brown blink     1  1  1  0    E    Yellow1  1  1  1    F    White blink     1  1  1  1    F    Bright white%@TE:  21  1617 04 35 41 @%
  7247. I  Intensity bit     G  Green bit        F  Flashing bit%@NL@%
  7248. R  Red bit           B  Blue bit%@NL@%
  7249. %@NL@%
  7250. %@NL@%
  7251. %@NL@%
  7252. %@2@%%@AB@%Hexadecimal-Binary-Decimal Conversion%@CR:Conversion@%%@AE@%%@EH@%%@QR:hexadecimal@%%@QR:binary@%%@QR:decimal@%%@QR:hex@%%@QR:conversion@%%@QR:radix conversion@%%@NL@%
  7253. %@NL@%
  7254. %@TH: 019 01413 02 8 9 13 13 13 20 @%%@AB@%Hex%@AE@%     %@AB@%Binary%@AE@%   %@AB@%Decimal%@AE@%      %@AB@%Decimal%@AE@%      %@AB@%Decimal%@AE@%      %@AB@%Decimal%@AE@%%@AB@%Number%@AE@%  %@AB@%Number%@AE@%   %@AB@%Digit 000X%@AE@%   %@AB@%Digit 00X0%@AE@%   %@AB@%Digit 0X00%@AE@%   %@AB@%Digit X000%@AE@%───────────────────────────────────────────────────────────────────────────0       0000        0             0              0            01       0001        1            16            256        4,0962       0010        2            32            512        8,1923       0011        3            48            768       12,2884       0100        4            64          1,024       16,3845       0101        5            80          1,280       20,4806       0110        6            96          1,536       24,5767       0111        7           112          1,792       28,6728       1000        8           128          2,048       32,7689       1001        9           144          2,304       36,864A       1010        0           160          2,560       40,960B       1011       11           176          2,816       45,056C       1100       12           192          3,072       49,152D       1101       13           208          3,328       53,248E       1110       14           224          3,584       57,344F       1111       15           240          3,840       61,440%@TE: 019 01413 02 8 9 13 13 13 20 @%
  7255.